2017-04-26 32 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