gpt4 book ai didi

python - 嵌套类: Accessing the methods of the outer class from the inner one

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:07 27 4
gpt4 key购买 nike

假设您有两个类,AB。 B类定义在A类内部。我想在内部类内部访问外部类的变量和方法。这里的代码是一个玩具示例,但具有我想要演示的要点:

class A:
a = 'even'
b = 'odd'
class B:
def __init__(self, n):
if n%2 == 0: self.num = a
if n%2 == 1: self.num = b
self.description = A.desc()

def __getitem__(self, i):
return self.B(i)

def desc(self):
return a + '-' + b

>>> c = A()
>>> d = c[4]
>>> TypeError: unbound method desc() must be called with A instance as first argument (got nothing instead)

这里,方法 desc 对类 A 的变量进行一些处理并生成输出。类 A 已正确初始化,并且您可以访问变量 ab,甚至可以从内部作用域访问,前提是您没有定义描述变量。但是,我找不到调用外部作用域类方法 desc 的方法。是否可以在B中使用方法desc而不实例化类A

解释为什么我使用这种模式:我的程序中的变量ab相当大。我只需要初始化它们一次。此外,我不希望这些变量在程序中 float ,而只能由内部类访问。除此之外,我可以在需要时使用 A.__getitem__ 提取大数据的“切片”。因此,外部类为我提供了数据的隐藏/封装、索引运算符(通过 __getitem__ )以及提取数据切片所需的所有例程(此处为方法 desc ) >. 内部类 B 为每个索引提供了来自大数据的有用信息的捆绑。这很可能不是实现所描述任务的最佳设计。我是开放和渴望的听取您对替代模式的意见。

最佳答案

我看不出您有任何理由在这里使用类,更不用说嵌套类了。无论如何,几乎没有理由在 Python 中嵌套类,因为内部类无法获得对外部类的任何特殊访问权限。

但是,如果您想允许任何东西访问方法而不实例化对象,您可以将其设为类方法:

@classmethod
def desc(self):
return a + '-' + b

但我不明白你为什么要这样做。另外,这里没有什么是闭包的。

关于python - 嵌套类: Accessing the methods of the outer class from the inner one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33899549/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com