从另一个类访问类变量

时间:2016-12-02 16:14:26

标签: python class subclassing class-instance-variables

如何访问对象中的实例并将其传递给另一个' main'宾语?我正在使用解析器来处理解析不同标签的文件,INDI(个人),BIRT(事件),FAMS(配偶),FAMC(儿童)

基本上有三个类:人,事件,家庭

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._event从Event类转移到addBirth方法中,以将其添加到我的person类中。我对班级和班级的干预如何运作知之甚少。请帮忙!

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

处理此类情况的最恰当方法是使用gettersetter方法;数据封装在OO编程中很重要。与其他语言相比,我并不总是在Python中看到这样做。它只是意味着向类添加方法,其唯一目的是将args返回给调用者,或者从调用者修改args。例如

假设您有课程AB,而课程B(来电者)想要使用课程x中的变量A。然后,类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想要类x的实例对象A的{​​{1}}属性,class_A只需要调用B方法。

就传递对象本身的实例而言,假设您希望getter将已经创建的实例对象传递给类A中的方法,那么实际上,您只需传递{ {1}}。