【问题标题】:Access attribute of one instance from another instance defined in that instance从该实例中定义的另一个实例访问一个实例的属性
【发布时间】:2020-06-12 00:33:53
【问题描述】:

抱歉这个令人困惑的问题。

假设有两个不同类的两个实例(例如“big_instance”和“little_instance”)。 little_instance 被定义为大实例的属性。 小类中的方法如何访问大实例的属性。

下面是一个例子。 'return parent.attribute1' 行基本上是伪代码。这行应该怎么写?

class BigClass:
    def __init__(self, att):
        self.attribute1 = att
        self.little_instance = LittleClass()

class LittleClass:
    def parents_att(self):
        return parent.attribute1

big_instance = BigClass(1)
print(big_instance.little_instance.parents_att())

【问题讨论】:

  • LittleClass 实例不会自动接收有关 BigClass 实例的任何信息。如果您希望 LittleClass 实例了解 BigClass 实例,则必须明确地向它提供该信息。
  • 这有道理,但我不知道该怎么做。

标签: python class oop instance


【解决方案1】:

是的,我明白了。阅读 cmets 以获得解释。

最后的测试代码表明即使在attribute1更改后它也可以工作:)

class BigClass:
    def __init__(self, att):
        self.attribute1 = att
        # pass in self
        self.little_instance = LittleClass(self)

class LittleClass:
    def __init__(self, the_big_class):
        # the big class is held in an instance var
        self.the_big_class = the_big_class

    def parents_att(self):
        # the instance var is used to reference the attribute
        return self.the_big_class.attribute1

big_instance = BigClass(1)
print(big_instance.little_instance.parents_att())
big_instance.attribute1 = 2
print(big_instance.little_instance.parents_att())

【讨论】:

    【解决方案2】:

    如果您想将属性从 BigClass 访问到 LittleClass,您可以执行以下操作。

    class BigClass:
        def __init__(self, att):
            self.attribute1 = att
    
    
    class LittleClass(BigClass):
        def __init__(self, att):
            BigClass.__init__(self, att)
    
        def parent_att(self):
            return self.attribute1
    
    
    small_instance = LittleClass(1)
    print(small_instance.parent_att)
    

    【讨论】:

    • 在这个解决方案中 small_instance 没有在 BigClass 的实例中定义:/ 抱歉,继承不行,只是想知道是否可以访问所示的属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多