2016-12-02 166 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即可。