2017-04-26 35 views
2

我有以下类结构attributibutes:获取唯一的基类(Python)的

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 

也许不是最好的例子,但我希望足以让这个想法翻过。我的想法是,我初始化两个独立的实例,共享一些共同的属性和方法。我需要能够将这两个对象转储到某些json和csv文件中,我希望通过方法dump_to_file(在此示例中替换为print_vars)来实现这些文件。现在,当我不得不将父类和子类的所有属性转储到单个文件时,此方法正常工作。不过,我只想从父类转储属性。我试图用supersuper(Parent, self)代替self,但没有取得太大的成功。访问的最佳方法是什么代码写入的类的属性是什么?

我相信Java会自动执行此操作,因为该方法是在父类中定义的,并且父类不知道子类的属性。

+0

为什么不能简单地创建父的对象,然后调用该方法。 – vks

+0

因为变量的值可能不同 –

回答

4

假设你不打算增加外__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'} 
+0

完美,谢谢! – k88