出現(xiàn)了問題,不知道如何解決,望大神幫忙解決一下
class Programmer(object):
? ?def __new__(cls, *args, **kwargs):
? ? ? ?print 'call __new__ method'
? ? ? ?print args
? ? ? ?print super(Programmer,cls).__new__(cls, *args, **kwargs)
? ?def __init__(self,name,age):
? ? ? ?print 'call __init__ method'
? ? ? ?self.name = name
? ? ? ?self.age = age
if __name__ == '__main__':
? ?programmer = Programmer('Albert',25)
? ?print programmer.__dict__
運(yùn)行結(jié)果:
"C:\Program Files\Anaconda2\python.exe" C:/Users/Administrator/PycharmProjects/untitled/classlearning4-2.py
Traceback (most recent call last):
call __new__ method
('Albert', 25)
<__main__.Programmer object at 0x00000000022F2C50>
? File "C:/Users/Administrator/PycharmProjects/untitled/classlearning4-2.py", line 17, in <module>
? ? print programmer.__dict__
AttributeError: 'NoneType' object has no attribute '__dict__'
2017-02-16
print programmer.__dict__
代碼最后一行的__dict__,因?yàn)樵镜腳_init__方法還沒有執(zhí)行。因此此時(shí)只是執(zhí)行了實(shí)例化的第一步__new__,通過下面dir語句可以看出此時(shí)沒有__init__過的對象確實(shí)沒有成員變量(屬性)。
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
最后一句改為上面__init__將會成功打印出對象的屬性
2021-03-08
重寫new這個(gè)魔術(shù)方法的時(shí)候,需要返回一個(gè)對象,將print改為return即可
2018-02-26
這個(gè)確實(shí)怪,怎么老師的代碼有問題,還拿出來教人啊,
2017-08-13
改了之后,只跳出來以下的代碼,沒有出現(xiàn)屬性?。客笊駧兔鉀Q,如何打印出屬性?