【问题标题】:Accessing Class variables from another class从另一个类访问类变量
【发布时间】:2016-12-02 16:14:25
【问题描述】:

如何访问对象中的实例并将其传递给另一个“主”对象?我正在使用解析器来解析不同标签的文件,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)

我想将 Event 类中的 self._event 转移到 addBirth 方法中,以将其添加到我的 person 类中。我对类和类继承如何工作知之甚少。请帮忙!

【问题讨论】:

  • 只需将参数添加到所需的方法并从适当的调用者传递?

标签: python class subclassing class-instance-variables


【解决方案1】:

如果我理解您的问题,您想将(例如)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)

【讨论】:

    【解决方案2】:

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

    假设您有 AB 类,而 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类的实例对象Ax属性,B只需要调用getter方法。

    至于传递对象本身的实例,假设您希望A 将自身已创建的实例对象传递给B 类中的方法,那么实际上,您只需传递self

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2023-04-07
      • 2020-11-24
      • 1970-01-01
      相关资源
      最近更新 更多