2016-12-02 170 views
0

如何訪問對象中的實例並將其傳遞給另一個「主」對象?我正在使用解析器解析不同標記的文件,INDI(個人),BIRT(事件),FAMS(配偶),FAMC(子女)從另一個類訪問類變量

基本上有三個類:Person,Event,Family

class Person(): 
    def __init__(self, ref): 
     self._id = ref 
     self._birth : None 

    def addBirth(self, event): 
     self._birth: event 

class Event(): 
    def __init__(self, ref): 
     self._id = ref 
     self._event = None 

    def addEvent(self, event): 
     self._event = event 

     #**event = ['12 Jul 1997', 'Seattle, WA'] (this is generated from a  function outside a class) 

我想將self._vent從Event類轉移到addBirth方法中,將它添加到我的person類中。我對階級和階級聯合會如何工作知之甚少。請幫忙!

+0

只需將一個參數添加到所需的方法並從適當的調用者傳遞它? – Tobias

回答

0

如果我理解您的問題,您想將(例如)Event對象傳遞給Person的實例?

老實說,我不明白你的代碼的意圖,但你可能只需要將self從一個類實例傳遞給另一個類實例。

self引用當前實例。

class Person: 
    def __init__(self): 
     self._events = [] 

    def add_event(self, event) 
     self._events.append(event) 

class Event: 
    def add_to_person(self, person): 
     person.add_event(self) 
0

來處理類似的情況,這是使用gettersetter方法的最適當的方式;數據封裝在面向對象編程中非常重要。與其他語言相比,我並不總是在Python中認爲它應該完成。它只是將方法添加到您的類中,這些方法的唯一目的是將參數返回給調用者,或者修改調用者的參數。例如

說你有A類和B和類B(主叫方)希望從A類使用一個變量x。然後,類A應提供getter接口來處理這種情況。設置你的工作方式相同:

class class_A(): 
    def __init__(self, init_args): 
     x = 0 

    def someMethod(): 
     doStuff() 

    def getX(): 
     return x 

    def setX(val): 
     x = val 

class class_B(): 
    def init(self): 
     init_args = stuff 
     A = class_A(init_args) 
     x = class_A.getX() 

    def someOtherMethod(): 
     doStuff() 

因此,如果類B想一個實例對象class_A類的AB只需要調用getter方法的x財產。

至於傳遞對象本身的實例,比如說你想讓A將自己已經創建的實例對象傳遞給B類中的方法,那麼的確如此,你只需要通過self即可。