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的主要内容,如果未能解决你的问题,请参考以下文章