我可以在 python 中有多个构造函数并覆盖 __str__ 方法吗

Can I have multiple constructors in python and overriding __str__ method

到此结束,谢谢! 在评论中查看答案

您的代码已经满足要求: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)

在此处阅读有关拥有多个构造函数的更多信息:What is a clean, pythonic way to have multiple constructors in 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)

希望这对您有所帮助。祝你好运。