2012-12-31 123 views
-2

這裏是我的,哈哈類使用`object`實例化自定義類

class haha(object): 
    def theprint(self): 
    print "i am here" 

>>> haha().theprint() 
i am here 
>>> haha(object).theprint() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: object.__new__() takes no parameters 

爲什麼haha(object).theprint()得到錯誤的輸出?

+9

你在期待'哈哈(對象)'做什麼? – BrenBarn

+3

OP令人困惑的繼承與實例化 – inspectorG4dget

+0

雖然這是一個新手問題,但我認爲作者正在嘗試一個很好的問題,這是一個可以理解的混淆。在我的書中,不是一個downvote的理由。 –

回答

0

class haha(object):表示haha繼承自object。從object繼承基本上意味着它是一個新風格的類。

調用haha()創建的haha一個新的實例,從而調用構造這將是一個名爲__init__方法。但是,您沒有這樣的默認構造函數,它不接受任何參數。

0

您的haha稍有變動的示例可能會幫助您瞭解正在發生的事情。我已經實現了__init__,所以你可以看到它被調用的時間。

>>> class haha(object): 
... def __init__(self, arg=None): 
...  print '__init__ called on a new haha with argument %r' % (arg,) 
... def theprint(self): 
...  print "i am here" 
... 
>>> haha().theprint() 
__init__ called on a new haha with argument None 
i am here 
>>> haha(object).theprint() 
__init__ called on a new haha with argument <type 'object'> 
i am here 

正如你所看到的,haha(object)最終傳遞object作爲參數傳遞給__init__。由於您未執行__init__,因此您收到錯誤消息,因爲默認__init__不接受參數。正如你所看到的,這樣做沒有多大意義。

0

你很混淆在實例化時初始化一個類的繼承。

在這種情況下,你的類聲明,你應該做的

class haha(object): 
    def theprint(self): 
     print "i am here" 

>>> haha().theprint() 
i am here 

由於哈哈(對象)是指從哈哈對象繼承。在python中,沒有必要寫這個,因爲所有的類都默認從對象繼承。

如果您有接收參數的初始化方法,你需要通過這些參數實例時,例如

class haha(): 
    def __init__(self, name): 
     self.name=name 
    def theprint(self): 
     print 'hi %s i am here' % self.name 

>>> haha('iferminm').theprint() 
hi iferminm i am here 
相關問題