首页 > 解决方案 > 如何通过调用嵌套类中的静态调用方法来更改对象的实例属性

问题描述

我希望 Inner 类更改实例化对象 (o) 的属性,在本例中为“some_var”;o.some_var。

我已经尝试在 Google 和 stackoverflow 上搜索嵌套类以及内部类如何访问外部类属性。我更改了内部类所采用的参数,例如实例化对象(self),但没有效果。

class Outer:
    def __init__(self):
        self.some_var = 1
        self.Inner = Inner()

    class Inner:
        def print_some_var(self):
            print("I'm Inner's method, printing:", self.some_var)

        def change_some_var(self, n):
            self.some_var = n

o = Outer()

print("Printing directly.", o.some_var)
o.Inner.print_some_var()
o.Inner.change_some_var(5)
o.Inner.print_some_var()

我需要这段代码中的两件事,既基于可以访问外部类的内部类,也基于通过静态调用它(内部类)并更改外部类对象属性(some_var)来更改/读取它。像:

  1. 通过调用 Inner 类来更改 Outer 类对象的 some_var,例如“o.Inner.change_some_var(5)”。
  2. 通过在实例化对象内部静态调用内部类来打印/读取外部类对象的 some_var,例如“o.Inner.print_some_var()”。

相反,python 解释器向我抛出了一个异常:

Traceback (most recent call last):
  File "nestedclasses.py", line 16, in <module>
    o.Inner.print_some_var()
  File "nestedclasses.py", line 8, in print_some_var
    print("I'm Inner's method, printing:", self.some_var)
AttributeError: 'Inner' object has no attribute 'some_var'

标签: pythonclassnested

解决方案


class Outer:
    def __init__(self):
        self.some_var = 1
        self.inner = Inner(self)

class Inner:
    def __init__(self, parent):
        self.parent = parent

    def print_some_var(self):
        print("I'm Inner's method, printing:", self.parent.some_var)

    def change_some_var(self, n):
        self.parent.some_var = n

o = Outer()

print("Printing directly.", o.some_var)
o.inner.print_some_var()
o.inner.change_some_var(5)
o.inner.print_some_var()

推荐阅读