在Python中一切皆对象,不太清楚为什么请看:深刻理解Python中的元类(metaclass)

一句话概括:self表示类的实例对象,而非类对象。

class Foo(object):
    def __init__(self):
        print('Foo is %s, self is %s'%(Foo,self))
        
    def prt(self):
        print('----------')

r = Foo()
# 结果如下
# Foo is <class '__main__.Foo'>, self is <__main__.Foo object at 0x02833C50>

当我们执行 r.prt() 时,Python解释器默认会调用Foo.prt()并将r作为第一个参数传入,也就是Foo.prt(r)

 

当然self不用非得写成self,this或者其他都可以。

 

当调用某个方法时,可以通过__self__来查看其调用者,__self__是一个只读属性,不可修改

class Bar(object):
    def prt(self):
        print('bar')

b = Bar()
p = b.prt
print(p.__self__)

# <__main__.Bar object at 0x017AF970>

 

posted on 2017-04-18 21:27  MnCu  阅读(201)  评论(0编辑  收藏  举报