|
发表于 2022-5-29 19:37:11
|
显示全部楼层
本楼为最佳答案
本帖最后由 isdkz 于 2022-5-29 19:38 编辑
你在定义这个类的时候并不知道类会实例化成什么实例名呀,
如果类的方法需要用到自己的属性应该怎么定义呢?
假如你知道你的 A 类的 a 方法需要使用自己的属性,且 A 会实例化成 a1,
你可以这样定义:
>>> class A:
... @staticmethod
... def a():
... print(a1.test)
...
>>> a1 = A()
>>> a1.test = 89
>>> a1.a()
89
>>>
但这有一个问题,这对 a1 来说是访问自己的属性,那对其它实例来说呢,
>>> a2 = A()
>>> a2.test = 698
>>> a2.a()
89
>>>
可以看到对 a2 来说,a 方法里面访问的还是 a1 的属性,而不是自己的,
所以这个“自己”不能在类中写死,而在类的方法中又需要访问自己的属性,
只有动态传参可以做到,也就是第一个参数 self,而这个 self 解释器会帮我们自动传入调用方法的实例,
所以 self 非常必要:
>>> class A:
... def a(self):
... print(self.test)
...
>>> a1 = A()
>>> a1.test = 89
>>> a1.a()
89
>>> a2 = A()
>>> a2.test = 698
>>> a2.a()
698
>>>
注:我前面的演示代码中用了 @staticmethod 是为了不让解释器自动把调用方法的实例传入,
因为如果解释器默认自动传入了,而方法中没有接收的参数会导致程序出错
|
|