【发布时间】:2019-11-14 21:57:06
【问题描述】:
我有 2 节课:
class Parent(object):
def __init__(self, id, name):
self.id = id
self.name = name
self.__parent_vars = ['id', 'name'] # make a copy
def print_values(self):
res = {}
for el in self.__parent_vars:
res[el] = vars(self)[el]
return res
class Child(Parent):
def __init__(self, id, name, last_name, age):
Parent.__init__(self, id, name)
self.last_name = last_name
self.age = age
我想做的是从Child 类的Parent 参数中获取。我使用额外的变量制作它并且它可以工作,但我需要更优雅的解决方案而不需要额外的变量。我需要它来上泡菜课。如果我创建额外的变量,它会破坏我在一个大项目中的架构。
我试图找到这样的东西:
c = Child(12,"Foo","whatever",34)
vars(c.super())
预期输出:
{'id': 12, 'name': 'Foo'}
我发现了这个问题:Get attributibutes in only base class (Python) 但它和我的有很大的不同,所以我不能使用那个解决方案。
【问题讨论】:
-
它们是通过分配给
self创建的,这已经是Child。属性不会跟踪创建它们的函数。至少在某种程度上,您需要继续明确定义哪些属性属于父级。 (self.__parent_vars = list(self.__dict__)可能是一个选项。) -
@Ry- 感谢您的回复!这是否意味着不可能?一些
super提示或其他什么?或者关于创建一些额外的方法而不是字段的一些提示? -
vars(c)打印:{'id': 12, 'name': 'Foo', '_Parent__parent_vars': ['id', 'name'], 'last_name': 'whatever', 'age': 34}而不是c.print_values(){'id': 12, 'name': 'Foo'} -
也许在 Child 中,您应该创建新的
print_values,它使用super().print_values()来执行父print_values,然后将子值添加到父值。 -
@MatteoPeluso 是的,当然 :) 这就是我问这个问题的原因)
标签: python python-3.x class oop inheritance