将一个类的对象添加到另一个类的对象,并在Python中检查重复项

将一个类的对象添加到另一个类的对象,并在Python中检查重复项,python,Python,我必须创建两个类:玩家和团体。 类播放器具有名称和级别属性。创建播放器实例后,将在0到99范围内创建一个唯一标识符 类组具有属性名称。创建组实例后,将在0到20范围内创建唯一的groupIdentifier。在类组中,我需要创建一个名为addPlayer的方法来添加类Player的实例,并检查要添加的实例是否重复。addPlayer方法返回添加到其中的播放机的唯一标识符。我有以下代码: class Player(object): identifier =0 def __in

我必须创建两个类:玩家和团体。 类播放器具有名称和级别属性。创建播放器实例后,将在0到99范围内创建一个唯一标识符

类组具有属性名称。创建组实例后,将在0到20范围内创建唯一的groupIdentifier。在类组中,我需要创建一个名为addPlayer的方法来添加类Player的实例,并检查要添加的实例是否重复。addPlayer方法返回添加到其中的播放机的唯一标识符。我有以下代码:

class Player(object): 
    identifier =0  
    def __init__(self,name, level=""):
        self.name = name
        self.level =level
        self.identifier += 1
        if(len(self.name) < 1):
            raise ValueError("Name.__init__:  is empty")

        if(self.identifier>=99):
            raise ValueError("Identifier.__init__:  exceeds 99")

class Group(object): 
    groupIdentifier =0  
    def __init__(self,name, player=[]):

        self.name = name
        self.player = player
        self.groupIdentifier += 1
        if(len(self.name) < 1):
            raise ValueError("Name.__init__:  is empty")

        if(self.groupIdentifier>20):
            raise ValueError("GroupIdentifier.__init__:  exceeds 20")


    def addPlayer(self, myPlayer): 
        if myPlayeris None:
            raise ValueError("myPlayer:  is empty")

        for x in range(len(self.player)):
            if self.player[x]==(myPlayer):
               raise ValueError("Player:  is duplicate")

        self.participant.append(myPlayer)
        return self.player.identifier
class播放器(对象):
标识符=0
定义(self,name,level=“”):
self.name=名称
self.level=level
self.identifier+=1
如果(len(self.name)<1):
raise VALUERROR(“Name.\uuuuu init\uuuuuu:为空”)
如果(自身标识符>=99):
提升值错误(“标识符。\uuuuu初始值\uuuuuuu:超过99”)
类别组(对象):
groupIdentifier=0
def uuu init(self,name,player=[]):
self.name=名称
self.player=玩家
self.groupIdentifier+=1
如果(len(self.name)<1):
raise VALUERROR(“Name.\uuuuu init\uuuuuu:为空”)
如果(self.groupIdentifier>20):
提升值错误(“GroupIdentifier.\uuuuu init\uuuuuuu:超过20”)
def addPlayer(自我,我的播放器):
如果myPlayeris无:
提升值错误(“myPlayer:为空”)
对于范围内的x(len(self.player)):
如果self.player[x]==(myPlayer):
提升值错误(“玩家:重复”)
self.participant.append(myPlayer)
返回self.player.identifier

您能建议我需要在代码中进行哪些更改以满足要求吗?

使用class属性为玩家(和组!)提供标识符,而不是实例属性:

class Player(object): 
    identifier = 0  
    def __init__(self,name, level=""):
        self.name = name
        self.level =level
        # identifier belong to the class not an instance of it!
        # change in Group as well!
        self.identifier == Player.identifier
        Player.identifier += 1
        if(len(self.name) < 1): # can be 'if not self.name'
            raise ValueError("Name.__init__:  is empty")

        if(self.identifier>=99):
            raise ValueError("Identifier.__init__:  exceeds 99")
您还可以在
组中使用
self.players
(复数)来标记它是多个
Player
实例的
列表

现在更改
组中的播放器比较位
,并使用
中的
关键字:

if myPlayer in self.players:
    raise ValueError("Player:  is duplicate")
更改后:

class Player(object): 
    identifier = 0  
    def __init__(self,name, level=""):
        self.name = name
        self.level =level
        self.identifier += Player.identifier
        Player.identifier += 1
        if not self.name:
            raise ValueError("Name.__init__:  is empty")

        if(self.identifier>=99):
            raise ValueError("Identifier.__init__:  exceeds 99")

    def __eq__(self, other):
    if isinstance(other, Player):
        # other object is a Player instance with the same identifier
        return self.identifier == other.identifier
    return False

class Group(object): 
    groupIdentifier = 0  

    def __init__(self,name, players=[]):

        self.name = name
        self.players = players
        self.groupIdentifier = Group.groupIdentifier
        Group.groupIdentifier += 1
        if not self.name:
            raise ValueError("Name.__init__:  is empty")

        if(self.groupIdentifier>20):
            raise ValueError("GroupIdentifier.__init__:  exceeds 20")


    def addPlayer(self, myPlayer): 
        if myPlayer is None:
            raise ValueError("myPlayer:  is empty")

        if myPlayer in self.players:
            raise ValueError("Player:  is duplicate")

        # removed participant, as it is unclear where it's coming from
        # if you need it - add it to __init__
        self.players.append(myPlayer)
        return myPlayer.identifier
class Player(object): 
    identifier = 0  
    def __init__(self,name, level=""):
        self.name = name
        self.level =level
        self.identifier += Player.identifier
        Player.identifier += 1
        if not self.name:
            raise ValueError("Name.__init__:  is empty")

        if(self.identifier>=99):
            raise ValueError("Identifier.__init__:  exceeds 99")

    def __eq__(self, other):
    if isinstance(other, Player):
        # other object is a Player instance with the same identifier
        return self.identifier == other.identifier
    return False

class Group(object): 
    groupIdentifier = 0  

    def __init__(self,name, players=[]):

        self.name = name
        self.players = players
        self.groupIdentifier = Group.groupIdentifier
        Group.groupIdentifier += 1
        if not self.name:
            raise ValueError("Name.__init__:  is empty")

        if(self.groupIdentifier>20):
            raise ValueError("GroupIdentifier.__init__:  exceeds 20")


    def addPlayer(self, myPlayer): 
        if myPlayer is None:
            raise ValueError("myPlayer:  is empty")

        if myPlayer in self.players:
            raise ValueError("Player:  is duplicate")

        # removed participant, as it is unclear where it's coming from
        # if you need it - add it to __init__
        self.players.append(myPlayer)
        return myPlayer.identifier