Python继承-在父级中可以有默认值吗?
如果我有一个所有子类都将继承的父类属性,那么我是否可以设置一个默认值,以便在创建对象时,它自动从父类获取默认值,并且在创建它时不必提供任何参数Python继承-在父级中可以有默认值吗?,python,inheritance,default,parent,Python,Inheritance,Default,Parent,如果我有一个所有子类都将继承的父类属性,那么我是否可以设置一个默认值,以便在创建对象时,它自动从父类获取默认值,并且在创建它时不必提供任何参数 class F1(object): def __init__(self, sick="flu"): self.sick = sick class F2(F1): def __init__(self, sick, cure): super(F2, self).__init__(sick) self.c
class F1(object):
def __init__(self, sick="flu"):
self.sick = sick
class F2(F1):
def __init__(self, sick, cure):
super(F2, self).__init__(sick)
self.cure = cure
a = F2("bed rest")
print(a.sick)
print(a.cure)
这只是一段示例代码来说明我的意思。我希望每个子对象都从父对象继承“病态”,这样在创建对象时就不必发送该参数。这可能吗?做同样的事情有不同的方法吗?将“sick”作为类属性是否更好?使用
super
是Python中实现这一点的标准方法。如果你想覆盖,只需覆盖
class F2(F1):
def __init__(self, sick, cure):
super(F2, self).__init__(sick)
self.cure = cure
self.sick = sick + 1
根据您的需要,可以选择添加class属性。根据您的描述,我认为这听起来更好,因为sick
的默认值永远不会更改,这可能就是您需要的
使用类属性不会影响重写,因为在实例上指定属性时,不会触及类属性。例如:
>>> class F:
... a = 1
...
>>> f1, f2 = F(), F()
>>> f2.a = 2
>>> f1.a
1
代码的问题是,您正在声明
F2.\uuuu init\uuu
具有两个显式参数,即使您只想传递一个。
如果希望能够选择性地覆盖F1
的创建参数,则需要自己处理该参数(请参见F3
)
另外,如果孩子想推翻父母的默认,我问的问题也可能吗?这个问题是否措辞糟糕或不清楚?我猜这个问题可能没有得到回答…最后的评论应该怎么做?吓跑可能的贡献者???@netrate你的问题确实得到了回答。不仅如此:它甚至收到了两个不同的答案。如果您觉得其中一个答案有帮助,请您投票/标记为接受答案?我知道,这正是我想要的。我考虑了同样的解决方案,但假设有一种更简单的方法。谢谢
class F1(object):
def __init__(self, sick="flu"):
self.sick = sick
class F2(F1):
def __init__(self, cure):
super(F2, self).__init__()
self.cure = cure
class F3(F1):
def __init__(self, cure, sick=None):
if sick is None:
super(F3, self).__init__()
else:
super(F3, self).__init__(sick)
self.cure = cure
a = F2("bed rest")
print("%s -> %s" % (a.sick, a.cure))
b = F3("inhale")
print("%s -> %s" % (b.sick, b.cure))
c = F3(sick="curiosity", cure="none")
print("%s -> %s" % (c.sick, c.cure))