美文网首页
python 类成员函数的self问题

python 类成员函数的self问题

作者: 1037号森林里一段干木头 | 来源:发表于2021-02-03 17:32 被阅读0次

简介: 在一个项目中我希望封装一些opencv的函数,方便自己使用,类里面没有定义成员变量,所以我以为在成员函数里面没必要加self了,然后一直显示参数数目错,这里把工程抽象一下,把问题点提取出来记录一下。

  1. 代码
import cv2 as cv
import numpy as np

class cvtool:
    def showImage(self,img, name="img", waitkeyMode=1, destroyMode=0, windowSizeMode=0):
        if img is None:
            print("In function showImage: the input image is None!")
            return
        cv.namedWindow(name,windowSizeMode)
        cv.imshow(name,img)
        cv.waitKey(waitkeyMode)
        if windowSizeMode != 0:
            cv.destroyWindow(name)

    def canny(img, th1=80, th2=180):
        return cv.Canny(img,th1,th2)

mytool = cvtool()
img = cv.imread("F:\\imagedata\\miniLed\\templateMatch\\src_1.png")
canny = mytool.canny(img, 80, 180)
mytool.showImage(canny,"canny",0)

  1. 报错
Traceback (most recent call last):
  File "del.py", line 21, in <module>
    canny = mytool.canny(img, 80, 180)
TypeError: canny() takes from 1 to 3 positional arguments but 4 were given

  1. 问题
    python类的成员函数必须有一个参数表示对象本身,而且必须是参数列表的第一个,在调用成员函数时,第一个参数是不会被赋值的,传递进来的参数都是从第二个开始赋值。
    例如:
class test:
    def aaaa(first, second=2, third=3):
        print("first:{},second:{},third:{}".format(first,second,third))

t = test()
t.aaaa(1,2)

输出:

(py3) D:\mydoc\python\imageProcess>python del2.py
first:<__main__.test object at 0x00000221EA0A4670>,second:1,third:2

从结果可以看出调用aaaa(1,2)方法时,1没有传给first,而是传给second,first表示的是对象,这是python自动完成的。一般情况下我们都用self表示对象本身,如:def aaa(self,first,second):但是self并不是python的关键字,也就是self可以换成其他任何你想换的名字(除了python关键字),不过为了直观大多数都选择用self了。
4.要修改1.中的bug就很容易了,在类成员函数的参数列表里加上self即可。

def canny(self, img, th1=80, th2=180):
        return cv.Canny(img,th1,th2)

相关文章

  • python 类成员函数的self问题

    简介: 在一个项目中我希望封装一些opencv的函数,方便自己使用,类里面没有定义成员变量,所以我以为在成员函数里...

  • 蟒蛇日志|self(自己)

    问题:Python 中的self的作用是什么? 这其实是函数和类的区别,函数不需要self,类需要这个参数。 以下...

  • 四、函数成员:方法 @GeekBand

    全局函数 成员函数 -:实例方法 self 实例对象 +:类型方法 self 类的类型 内部参数名 外部参数名 方...

  • python中类的函数中的self

    Python类中的self到底是干啥的 Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管...

  • 2017.6.19

    开始学习python3坑1、类的成员函数有一个固定的参数是self,一定要写。在写单元测试unittest的时候s...

  • Dataquest笔记

    python中级 class 其中,init要加双下划线,所有成员函数要有self参数。 try...except...

  • OOP

    类定义 说明:init为构造函数,第一个参数为self为函数本身。类成员以双下划线开头,说明为private访问限...

  • python中的self

    首先,对于python,只有针对类来说的self才有意义,所以python中的self,说的即是python类中的...

  • 2021-01-12python基础语法

    写类内部函数调用用self.函数名 函数书写格式 def 函数名(self,a:int)->intdef 函数名(...

  • 一文了解Python中使用self的原因

    Python要用self的理由 Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一...

网友评论

      本文标题:python 类成员函数的self问题

      本文链接:https://www.haomeiwen.com/subject/qhcmtltx.html