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