Как мне написать класс Python, принимающий другие объекты суперкласса в качестве параметров - PullRequest
0 голосов
/ 05 октября 2019

Предположим, что у меня есть класс с именем Person и класс, который наследует это, называется Group. У человека есть атрибут с именем name и атрибут с именем age. Когда я создаю Группу, я хочу передать объектам n человек, и их новое имя - это комбинация имен, а их новый век - их совокупный возраст.

также, черт возьми, будет отслеживать, какмного людей, и сколько групп существует по отдельности (просто наследование имеет какой-то смысл в этом примере.)

class Person:
    count = 0
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.id = make_person() # count is also the person's id in this example

    def __str__(self):
        return f'Name: {self.name} Age: {self.age}'

    @classmethod
    def make_person(cls):
        cls.count += 1
        return cls.count

class Group(Person):
    def __init__(self, *people):
        #not sure how to do this, Below Does Not Work, something like
        new_name = self.make_group(people)
        new_age = self.new_age(people)
        self.name = new_name
        self.age = new_age
        super().__init__(self.new_name, self.new_age)

    def make_group(self, *people):
        return (' & ').join([person.name for person in People])

    def new_age(self, *people):
        return sum([person.age for person in people])

тогда вы думаете, что я мог бы написать

anne = Person('Anne', 20)
bob = Person('Bob', 20)
carl = person('Carl', 25)

couple = Group(anne, bob)
threesome = Group(anne, bob, carl)

print(couple)
print(threesome)

, но это не такработай. По какой-то причине групповой класс не получает людей, которых я пропускаю, или я неправильно его определяю ... есть идеи?

1 Ответ

0 голосов
/ 05 октября 2019

Вы написали, что Group - это особый тип Person. Это не совсем правильно для меня. В любом случае, вот версия, которая будет работать и выдавать желаемый результат:

class Person:
    count = 0
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.id = Person.make_person() # count is also the person's id in this example

    def __str__(self):
        return f'Name: {self.name} Age: {self.age}'

    @classmethod
    def make_person(cls):
        cls.count += 1
        return cls.count

class Group(Person):
    def __init__(self, *people):
        #not sure how to do this, Below Does Not Work, something like
        new_name = self.make_group(*people)
        new_age = self.new_age(*people)
        self.name = new_name
        self.age = new_age
        super().__init__(self.name, self.age)

    def make_group(self, *people):
        return (' & ').join([person.name for person in people])

    def new_age(self, *people):
        return sum([person.age for person in people])

anne = Person('Anne', 20)
bob = Person('Bob', 20)
carl = Person('Carl', 25)

couple = Group(anne, bob)
threesome = Group(anne, bob, carl)

print(couple)
print(threesome)

Изменения в вашем коде:

  • некоторые опечатки с заглавными буквами
  • put* перед people при его передаче
  • позаботиться о переменной области действия
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...