出現了問題,不知道如何解決,望大神幫忙解決一下
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__
運行結果:
"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__,因為原本的__init__方法還沒有執行。因此此時只是執行了實例化的第一步__new__,通過下面dir語句可以看出此時沒有__init__過的對象確實沒有成員變量(屬性)。
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
最后一句改為上面__init__將會成功打印出對象的屬性
2021-03-08
重寫new這個魔術方法的時候,需要返回一個對象,將print改為return即可
2018-02-26
這個確實怪,怎么老師的代碼有問題,還拿出來教人啊,
2017-08-13
改了之后,只跳出來以下的代碼,沒有出現屬性???望大神幫忙解決,如何打印出屬性?