我至今还是不明白,self是啥...(python)
哪个大神能通俗易懂的解释一下......self 就是实例对象本身
比如你定义了一个 A类,然后要将 A 类实例化, a = A()此时实例化对象就为 a ,而且这个实例对象的 self 参数就代表 a
奥,懂了,谢谢! self代表类的实例,而非类。
class Test:
def prt(self):
print(self)
print(self.__class__)
t = Test()
t.prt()
执行结果如下
<__main__.Test object at 0x000000000284E080>
<class '__main__.Test'>
在继承时,不是指定义了 self 的类的实例
class Parent:
def pprt(self):
print(self)
class Child(Parent):
def cprt(self):
print(self)
c = Child()
c.cprt()
c.pprt()
p = Parent()
p.pprt()
运行结果如下
<__main__.Child object at 0x0000000002A47080>
<__main__.Child object at 0x0000000002A47080>
<__main__.Parent object at 0x0000000002A47240>
解释:
运行c.cprt()时应该没有理解问题,指的是Child类的实例。
但是在运行c.pprt()时,等同于Child.pprt(c),所以self指的依然是Child类的实例,由于self中没有定义pprt()方法,所以沿着继承树往上找,发现在父类Parent中定义了pprt()方法,所以就会成功调用。
在描述符类中,self指的是描述符类的实例
不太容易理解,先看实例:
class Desc:
def __get__(self, ins, cls):
print('self in Desc: %s ' % self )
print(self, ins, cls)
class Test:
x = Desc()
def prt(self):
print('self in Test: %s' % self)
t = Test()
t.prt()
t.x
运行结果如下:
self in Test: <__main__.Test object at 0x0000000002A570B8>
self in Desc: <__main__.Desc object at 0x000000000283E208>
<__main__.Desc object at 0x000000000283E208> <__main__.Test object at 0x0000000002A570B8> <class '__main__.Test'>
self在定义时需要定义,但是在调用时会自动传入。
self的名字并不是规定死的,但是最好还是按照约定俗称用self
self指调用时的类的实例。 类与对象还是比较难的{:10_266:} 本帖最后由 Alex_Cai 于 2020-10-21 13:44 编辑
Hello. 发表于 2020-7-23 10:03
self代表类的实例,而非类。
请教一下t.prt()为什么self给了Desc,不理解
不好意思 搞错了明白了
页:
[1]