2014-11-22 13 views
1

外運行方法時對於以下類獲取對於對象無類型的__init__

class Member(object): 
    def __init__(self, fields, scouts, id): 
     self.id = id 
     self.fields = fields 
     self.scouts = scouts 
     self.routes = [Route(s) for s in self.scouts ] 
     self.routeBreak = [] 
     self.numScouts = len(self.scouts) 

運行此方法

def createMember(self):  
    random.shuffle(self.fields) 
    self.routeBreak = self.createBreaks(len(self.fields)) 
    self.assignRoutes() 

實施例:

Member.createMember() 

然而,這樣做後,對象成員返回爲「無」。我嘗試添加createMember()來初始化方法

class Member(object): 
    def __init__(self, fields, scouts, id): 
     self.id = id 
     self.fields = fields 
     self.scouts = scouts 
     self.routes = [Route(s) for s in self.scouts ] 
     self.routeBreak = [] 
     self.numScouts = len(self.scouts) 
     random.shuffle(self.fields) 
     self.routeBreak = self.createBreaks(len(self.fields)) 
     self.assignRoutes() 

然後一切都很好。我可以在對象上運行其他方法沒有問題。我不知道爲什麼會發生這種情況,我需要弄清楚如何在init方法之外運行createMember()。我對使用類和方法相當陌生,所以任何解釋都會有幫助。謝謝!

+0

你想要做'm = Member(); m.createMember()'? – 2014-11-22 19:18:14

+0

我試過了,以及'Member()。createMember()'(我不確定這是否合法)。 – josibake 2014-11-22 19:21:06

+0

我剛剛意識到我創建'm = Member()'時忘了添加參數。感謝讓我再看看那部分 – josibake 2014-11-22 19:30:18

回答

0

在Tim的問題上擴展,使用類時,您有類定義,類型,然後是類的實例,即對象。

createMember應作爲實例的方法調用,而不是類本身(這裏有一種類型 - 靜態方法或類方法,它們沒有「self」)。

所以,你需要創建實例:

m = Member() 

注 - 您需要的參數做到這一點。如果你希望它不需要參數,那需要更多的代碼。 然後訪問它那個方法:

m.createMember() 

你也可以把它裏面_init__(稱爲構造函數),其中「自我」是實例:

self.createMember() 
+0

啊!我意識到我的錯誤。在執行'm = Member()'時,我忘記爲init函數添加參數,並且當我嘗試在__init__中添加'createMember()'時,我想起了參數。不過,你的回答解決了我對創建類和創建實例的一些困惑。謝謝! – josibake 2014-11-22 19:28:27

0

作爲createMember需要一個自變量self這應該是實例本身,您不能通過Member.createMember()調用它,因爲這使得它成爲沒有成員實例作爲必需參數的未綁定方法。成員不是一個實例。您必須通過Member.createMember(memberInstance)來調用它以顯式提供實例本身。

Member().createMember()不需要提供參數是因爲Member()已創建一個實例,該實例將隱含地用作第一個參數self