2017-07-18 10 views
-4

私はクラスメソッドを呼び出す際に、まずリストからコピーを取得しようとしています。 これとは別に、この方法は正しく機能します。クラスメトリックを呼び出すことができません

class testCandidate: 
    voitingSistem=VoitingSystem() 
    voitingSistem.addCandidate("Putin") 
    candidate=Candidate("Putin") 
    print(candidate.GetName()) 
    print(voitingSistem.voiting.getCandidate(0).GetName()) 

OUT:

Traceback (most recent call last): Putin File "E:/Dropbox/Pyton/Network/Client-Server/Server/testCandidate.py", line 5, in class testCandidate: File "E:/Dropbox/Pyton/Network/Client-Server/Server/testCandidate.py", line 10, in testCandidate print(voitingSistem.voiting.getCandidate(0).GetName()) AttributeError: 'str' object has no attribute 'GetName'

class VoitingSystem: 
    users=[]; 
    voiting=""; 

    def __init__(self) -> None: 
     self.voiting=Voiting("Voiting1"); 
     super().__init__() 

    def addCandidate(self, name): 
     candidate=Candidate(name) 
     self.voiting.candidats.append(candidate) 
     return None 


    def getCandidate(self,index): 
     return self.voiting.getCandidate(index) 


class Voiting(object): 
    name="" 
    candidats=[] 

    def __init__(self,Name) -> None: 
     super().__init__() 
     self.name=Name 


    def getCandidates(self): 
     return self.candidats; 

    def getCandidate(self,index) -> Candidate: 
     return self.candidats[index]; 

    def addCandidate(self,Name): 
     self.candidats.append(Name) 


class Candidate: 
    name=""; 
    voices=0; 

    def __init__(self,Name): 
     self.name=Name; 
     self.voices=0; 


    def SetName(self,Name): 
     self.name=Name; 

    def GetName(self): 
     return self.name; 
+0

どうしますか? – jacoblaw

+0

またインデントを修正できますか? – jacoblaw

+0

'testCandidate'はなぜクラスでもありますか?裸のモジュールレベルのコードだけでなく、関数である必要があります。 – chepner

答えて

0

candidatsは、名前のリストです。名前(文字列)を取得して直接使用して、ユーザー定義クラスのメソッドを呼び出すことはできません。あなたはあなたの目的を非常にうまく定義していませんが、あなたが望むのは、クラスが候補オブジェクトのリストを保持していることです。この場合、次のようなものが必要です。

def addCandidate(self, candidate): 
    self.candidats.append(self, candidate) 

名前ではなくインスタンスを渡します。

関連する問題