问题:各位我想问一下,实例对象是可以直接调用属性的吗?
实例对象可以直接调用属性
就像你自己写的
a是Fish的实例化对象
a.power就可以直接调用了
>>> class Fish:
def __init__(self):
self.power=100
def strong(self):
self.power+=20
>>> a = Fish()
>>> a.power
100
疑惑:这里也不是返回120,如小甲鱼给的代码 他并没有直接return self.power,怎么能保证power的值有改变的呢?
在类中,构造方法是定义类的全局变量
没有返回120的原因是
构造函数中,定义的属性是
self.power = 100
定义的方法是
def strong(self):
self.power+=20
现在只定义了,但是还没有调用,所以power依旧是构建时的100
每当我们调用一次strong方法,self.power就会增加20
再调用一次,再增加20
>>> class Fish:
def __init__(self):
self.power=100
def strong(self):
self.power+=20
>>> a = Fish()
>>> a.power
100
>>> a.strong()
>>> a.power
120
>>> a.strong()
>>> a.power
140
问题2为什么写的第二个不能调用呢?
因为__init__(self)是类的魔法方法,在实例生成时会直接调用
我们不改变你写的代码,只要执行函数,也可以调用power属性
>>> class Fish:
def strong(self):
self.power=100
>>> a = Fish()
>>> a.power
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
a.power
AttributeError: 'Fish' object has no attribute 'power'
>>> a.strong()
>>> a.power
100
|