Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python继承-在父级中可以有默认值吗?_Python_Inheritance_Default_Parent - Fatal编程技术网

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))