python-self 叁歲伎倆 2023-06-02 10:47 14阅读 0赞 ## python中的self ## **self代表的是类的实例,不是类对象** class zx(): def h(self): print(self) print(self.__class__) x=zx() x.h() zx.h(x) #x.h()=zx.h(x) <__main__.zx object at 0x000001A2BA70FE48> <class '__main__.zx'> <__main__.zx object at 0x000001A2BA70FE48> <class '__main__.zx'> 在Python的解释器内部,当我们调用x.h()时,实际上Python解释成zx.h(x),也就是说把self替换成类的实例x。 **self不写也行** 其实self不是强制性的,不写也行,但是调用的话只支持类对象调用自己的函数,实例不能调用,为啥?Python的解释器内部,当我们调用z.h()时,会把他解释成zx.h(x),函数明明不需要参数,我们却给他传了一个参数,根据报错可知 class zx(): def h(): print("不写也行") z=zx() zx.h() z.h() 不写也行 Traceback (most recent call last): File "C:/Users/Administrator/Desktop/01python/研究/自带self查找/zx.py", line 7, in <module> z.h() TypeError: h() takes 0 positional arguments but 1 was given **在描述符类中,self指的是描述符类的实例** 描述符比较特殊,看结果 class zx: def __get__(self, ins, cls): print(self) print(ins) print(cls) class Test: x = zx() def prt(self): print(self) t = Test() t.prt() t.x <__main__.Test object at 0x00000132B602FCF8> <__main__.zx object at 0x00000132B602FDA0> <__main__.Test object at 0x00000132B602FCF8> <class '__main__.Test'> class zx: def __get__(self, ins, cls): print(self) print(ins) print(cls) class Test: x = zx() def prt(self): print(self) t = Test() t.prt() Test.x <__main__.Test object at 0x00000189D981FCF8> <__main__.zx object at 0x00000189D981FDA0> None <class '__main__.Test'> 转载于:https://www.cnblogs.com/zx125/p/11503555.html
还没有评论,来说两句吧...