python - 仅在基类中获取属性(Python)

标签 python inheritance

我有以下类结构:

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,我只想转储父类的属性。我尝试用 supersuper(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/

相关文章:

python - 使用条件语句 (IF/ELIF/ELSE) 使代码更简洁、更短

python - 在列表中查找具有相同第一项的元组并返回另一个列表

python 从文本文件中ping ip地址

python - Python 标准库中容器的命名约定

java - 如何注释从抽象类派生的实例变量?

java - 无法从子类访问 protected 方法

Python - 华为重启脚本

javascript - MDN 标题为 "Object.create()"的文档中关于 javascript 继承的混淆

javascript - 了解原型(prototype)继承

java - 不同的子类值能否体现在继承的方法中?