码迷,mamicode.com
首页 > 编程语言 > 详细

python-self

时间:2019-09-10 23:46:37      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:class   mini   pytho   报错   error   recent   elf   code   get   

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

标签:class   mini   pytho   报错   error   recent   elf   code   get   

原文地址:https://www.cnblogs.com/zx125/p/11503555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!