我有以下类结构:
class Parent(object):
def __init__(self, id, name):
self.id = id
self.name = name
def print_vars(self):
print(vars(self))
class Child(Parent):
def __init__(self, id, name, last_name, age):
Parent.__init__(self, id, name)
self.last_name = last_name
self.age = age
class AnotherChild(Parent):
def __init__(self, id, name, address):
Parent.__init__(self, id, name)
self.address= address
也许不是最好的例子,但我希望足以理解这个想法。这个想法是我初始化两个共享一些公共(public)属性和方法的单独实例。我需要能够将这两个对象转储到一些 json 和 csv 文件中,我希望通过 dump_to_file
方法(在此示例中由 print_vars
替换)来实现。现在,当我不得不将父类和子类的所有属性都转储到单个文件时,这种方法工作得很好。 Howeer,我只想转储父类的属性。我尝试用 super
或 super(Parent, self)
替换 self
但没有取得太大成功。 仅代码所在类的属性的最佳访问方式是什么?
我相信 Java 会自动执行此操作,因为该方法是在父类中定义的,而父类不知道子类的属性。
最佳答案
假设您不打算在 __init__
之外添加更多变量,您可以在父级的 __init__
方法中卡住变量列表:
def __init__(self, id, name):
self.id = id
self.name = name
self.__parent_vars = dict(vars(self)) # make a copy
然后使用这个字典,里面只有你初始化父类时定义的变量:
def print_values(self, path):
print(self.__parent_vars)
测试:
c = Child(12,"Foo","whatever",34)
c.print_vars()
我得到:
{'id': 12, 'name': 'Foo'}
关于python - 仅在基类中获取属性(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43633129/