python-self
Posted zx125
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-self相关的知识,希望对你有一定的参考价值。
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'>
以上是关于python-self的主要内容,如果未能解决你的问题,请参考以下文章