我可以在 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)
希望这对您有所帮助。祝你好运。
到此结束,谢谢! 在评论中查看答案
您的代码已经满足要求: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)
希望这对您有所帮助。祝你好运。