Могу ли я иметь несколько конструкторов в Python и переопределение метода __str__ - PullRequest
0 голосов
/ 01 декабря 2019

сделано здесь, спасибо! Смотрите ответ в комментариях

Ответы [ 2 ]

1 голос
/ 01 декабря 2019

Ваш код уже соответствует требованиям: Act может быть создан с 4 аргументами или с 3 аргументами, в этом случае stage устанавливается на None. Такое использование необязательных параметров является хорошей практикой в ​​python, но если вы хотите, вы можете добавить совершенно отдельный конструктор, реализованный также как @classmethod:

class Act:
    def __init__(self, num_members, name, kind, stage):
        self._num_members = num_members
        self._name = name
        self._kind = kind
        self._stage = stage

    @classmethod
    def without_stage(cls, num_members, name, kind):
        return cls(num_members, name, kind, None)

Теперь вы можете создавать Act как Act(num_members, name, kind, stage) или как Act.without_stage(num_members, name, kind).

0 голосов
/ 01 декабря 2019

Подробнее о наличии нескольких конструкторов читайте здесь: Что такое чистый, pythonic способ иметь несколько конструкторов в Python?

Мне удалось исправить некоторые проблемы в вашем коде. они упоминаются в моих комментариях:

class Act:
    # works fine
    def __init__(self, num_members, name, kind, stage=None):
        self._num_numbers = num_members
        self._name = name
        self._kind = kind
        self._stage = stage

    # all the getters work fine
    def get_num_members(self):
        return self._num_numbers

    def get_name(self):
        return self._name

    def get_kind(self):
        return self._kind

    def get_stage(self):
        return self._stage

    # all the setters work fine now
    def set_num_members(self, num_numbers):
        self._num_numbers = num_numbers

    def set_name(self, name):
        self._name = name

    def set_kind(self, kind):
        self._kind = kind

    def set_stage(self, stage):
        self._stage = stage

    # I did not see the need for properties
    # def__str__(self): your code did not have a space here
    #    ^ here
    # "\n" is newline and not "/n"
    def __str__(self):
        string = "Number of members:" + str(self._num_numbers)
        string += "\nName: " + self._name
        string += "\nKind of act: " + self._kind
        if self._stage:
            string += "\nStage: " + self._stage
        return string

# create the object
a = Act("5", "h", "6", "7")
print(a)

Надеюсь, это поможет. Удачи.

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