基本OOP“str”对象没有属性“age”

2024-06-28 20:31:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试执行一些基本的OOP命令,当我直接输入属性名时,这些代码可以工作,但当我尝试从用户输入中获取属性名时,这些代码就不能工作

print('Hello, welcome')

class ManCity:

    def __init__(self, name, age, position):
        self.name = name
        self.age = age
        self.position = position

    def getName(self):
        print(self.name)

    def getAge(self):
        print(self.age)

    def getPosition(self):
        print(self.position)


aguero = ManCity('Sergio Aguero', 32, 'Striker')
sterling = ManCity('Raheem Sterling', 27, 'Winger')
jesus = ManCity('Gabriel Jesus', 24,'Striker')
dias = ManCity('Ruben Dias', 29, 'Centre Back')
stones = ManCity('John Stones', 26, 'Centre Back')
ederson = ManCity('Ederson', 29,'GoalKeeper')

chosenName = input(str('Choose Player'))
ManCity.getAge(chosenName)


Tags: 代码nameselfage属性defbackposition
2条回答

您需要检查每个实例的chosenName,如

class ManCity:

    def __init__(self, name, age, position):
        self.name = name
        self.age = age
        self.position = position

    def getName(self):
        print(self.name)

    def getAge(self):
        print(self.age)

    def getPosition(self):
        print(self.position)


aguero = ManCity('Sergio Aguero', 32, 'Striker')
sterling = ManCity('Raheem Sterling', 27, 'Winger')
jesus = ManCity('Gabriel Jesus', 24,'Striker')
dias = ManCity('Ruben Dias', 29, 'Centre Back')
stones = ManCity('John Stones', 26, 'Centre Back')
ederson = ManCity('Ederson', 29,'GoalKeeper')

chosenName = input(str('Choose Player'))
# You can iterate over the created objects
for e in [aguero, sterling, jesus, dias, stones, ederson]:
    # for each object you will check if the name is same or not
    if(e.name == chosenName):
        print(e.getAge())

正如@Barmar所建议的,您可以创建一个从名称映射到实例的字典。这将使查找相应实例的速度非常快,并检查其名称是否在字典中

这里有一个这样做的例子。字典名为players。注意,它将玩家姓氏的小写版本映射到每个Player实例(并在处理之前将用户的输入转换为小写)

print('Hello, welcome')

class ManCity:
    def __init__(self, name, age, position):
        self.name = name
        self.age = age
        self.position = position

    def getName(self):
        print(self.name)

    def getAge(self):
        print(self.age)

    def getPosition(self):
        print(self.position)

    def __repr__(self):
        return f'{type(self).__name__}({self.name!r}, {self.age}, {self.position})'


# Create dictionary mapping players to their lowercase last name.
players = {}
for player in (ManCity('Sergio Aguero', 32, 'Striker'),
               ManCity('Raheem Sterling', 27, 'Winger'),
               ManCity('Gabriel Jesus', 24,'Striker'),
               ManCity('Ruben Dias', 29, 'Centre Back'),
               ManCity('John Stones', 26, 'Centre Back'),
               ManCity('Ederson', 29, 'GoalKeeper')):
    players[ player.name.split()[-1].lower() ] = player

while True:
    chosenName = input('Choose Player: ').lower()
    if chosenName.strip() == '':
        break  # Quit loop.
    if chosenName in players:
        print('Player info:', players[chosenName])
    else:
        print('Unknown name, try again')

使用示例:

Hello, welcome
Choose Player: Ederson
Player info: ManCity('Ederson', 29, GoalKeeper)
Choose Player: dias
Player info: ManCity('Ruben Dias', 29, Centre Back)
Choose Player:

相关问题 更多 >