美文网首页
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问题

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