python - 如何通过调用嵌套类中的静态调用方法来更改对象的实例属性
问题描述
我希望 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)来更改/读取它。像:
- 通过调用 Inner 类来更改 Outer 类对象的 some_var,例如“o.Inner.change_some_var(5)”。
- 通过在实例化对象内部静态调用内部类来打印/读取外部类对象的 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'
解决方案
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()
推荐阅读
- javascript - 收集器出错 | 不和谐.js
- html - 引导程序 | 你应该什么时候使用
超过
- node.js - puppeteer - how to intercept requests and responses only from a certain url in nodejs
- javascript - 带有 preventDefault 的简单表单不起作用(没有任何 jquery)
- flutter - 从图像选择器获取图像时,在 null 上调用了方法“add”
- python - 熊猫融化2组柱子
- office-js - 插件对话框中的 excel 上下文同步错误
- python - 为什么错误消息不会出现在 Flask 的表单验证中?
- javascript - 如何为lineString OpenLayers 5设置不同的颜色
- python - 得到一组三个随机变量服从从 0 到 1 的均匀分布,其中 X1+X2+X3=1