python - Python:如何在子类初始化时继承父类的所有当前属性?
问题描述
我正在尝试在父类中使用子类(我知道这很奇怪),并希望在初始化时将所有父属性继承到子类中。一般妆容如下所示。
我一直无法弄清楚如何在继承时继承属性而不仅仅是父类初始化(又名 super(). init ())。我是否必须将这些更新的值(如下面的 self.attr)作为参数传递给新的子类,还是有更简洁的方法?我有很多要传递的属性,所以我不希望将它们作为新属性传递给子类)。
class ParentClass():
def __init__(self, attr = None, attr1 = 1, attr2 = 2):
self.attr = attr
self.attr1 = attr1
self.attr2 = attr2
def define_attr(self):
self.attr = self.attr1 + self.attr2
def funct(self, val):
if not self.attr:
self.define_attr()
part = ChildClass(val).do_thing()
return part
class ChildClass(ParentClass):
def __init__(self, val):
self.val = val
def do_thing(self):
thing = self.attr + self.val + 2
return thing
test = ParentClass()
result = test.funct(3)
print(result)
想法?
解决方案
更新您的子类定义:
class ChildClass(ParentClass):
def __init__(self, val):
super().__init__(val)
self.val = val
def do_thing(self):
thing = self.attr + self.val + 2
return thing
当你的程序运行时,输出是6
推荐阅读
- python - py2exe 的可执行文件停止运行
- python - 压缩 PIL 图像而不保存文件
- excel - 将多个范围添加到数组,然后使用 .value 复制/粘贴到新工作表
- javascript - 条件类名三元运算符渲染
- python - 从 django 中的另一个可重用应用程序加载应用程序
- php - V2中没有papypal的按钮添加paypal支付的方法是什么
- html - 为什么 flex 项目的宽度随着 flex-grow: 0 增长
- windows - 从 Windows 中的环境变量生成 yaml 文件
- mysql - 为什么我得到的日期不在区间内?
- python - pandas.DataFrame.from_dict 更快的替代方案