有个问题请教一下
Topic source我是一个小白,我看了一下,可不可以理解成,前者未实例化一个类,MyObject.x = 2 只是给MyObject类绑定了一个类属性 如:(def MyObject(): x = 2 def __init__(self) ......),而后者是实例化了一个类,obj.x = 2属于修改了实例类的类属性,大神们帮我指点一下,看看正确吗,如不正确,指导一下正确解释,谢谢啦
fn1()=81是因为调用了类属性进行power(),而类属性是MyObject().x=9;fn2()=4,是因为调用了实例属性obj.x=2,执行power()自然是4;而MyObject.x与类MyObject(object)没关系,仅仅是个变量而已。不信的话你随意改动MyObject.x的值,print(MyObject().x)结果都不会等于MyObject.x的值,说到底是楼主定义代码时搞错了,有()解释器才会认为是你前面定义的类这一新数据类型,不然它就只是个变量(而这个变量的类型在未初始化时是任意的/未知的)
或者如果你是用Pycharm写代码的话,在Console输入以下代码
>>>class MyObject(object):
··· def __init__(self):
··· self.here = '有此属性'
显然
>>>MyObject.here
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: type object 'MyObject' has no attribute 'here'
而这样才是正确的
>>>MyObject().here
'有此属性'
希望以后我们大家在写代码能注意这个小问题,别最后找不出是哪里出了bug(lll¬ω¬)
- 1
DarkFireMaster
为什么fn1还是按默认值x=9来算,fn2就按后面的x=2来算