亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

出現了問題,不知道如何解決,望大神幫忙解決一下

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__'




正在回答

4 回答

print programmer.__dict__

代碼最后一行的__dict__,因為原本的__init__方法還沒有執行。因此此時只是執行了實例化的第一步__new__,通過下面dir語句可以看出此時沒有__init__過的對象確實沒有成員變量(屬性)。

???print?dir(programmer)

['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

print?programmer.__init__

最后一句改為上面__init__將會成功打印出對象的屬性

0 回復 有任何疑惑可以回復我~
#1

科研小小七 提問者

非常感謝您,受教了
2017-02-16 回復 有任何疑惑可以回復我~

重寫new這個魔術方法的時候,需要返回一個對象,將print改為return即可

0 回復 有任何疑惑可以回復我~

這個確實怪,怎么老師的代碼有問題,還拿出來教人啊,

0 回復 有任何疑惑可以回復我~

改了之后,只跳出來以下的代碼,沒有出現屬性???望大神幫忙解決,如何打印出屬性?

print?programer.__init__
<method-wrapper?'__init__'?of?NoneType?object?at?0x000000001E29D7D8>



0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

出現了問題,不知道如何解決,望大神幫忙解決一下

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號