假设您有两个类A
和B
。类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
的变量的一些工作,并产生输出的方法。因为您没有定义description
变量,所以类A
已正确初始化,您可以访问变量a
和b
,即使是从内部作用域也是如此。但是,我找不到调用外部作用域类方法desc
的方法。是否可以在B
中使用desc
方法而不实例化类A
?
解释为什么我用这样的模式:在我的程序 变量a
和b
是相当大的。我只需要初始化它们一次。另外,我不希望这些变量浮动在程序中,而只能被内部类访问。除此之外,我还可以在需要时使用A.__getitem__
来提取大数据的'切片'。因此,外部类为我提供了隐藏/封装数据,索引操作符(通过__getitem__
)以及提取数据片所需的所有例程(这里的方法desc
。内部类B
提供了有用信息的捆绑从每个指数的大数据来看,这很可能不是实现所描述任务的最佳设计,我很乐意听取您对于替代模式的意见
我接受这个答案,因为'@ classmethod'在很大程度上解决了我的问题。我将术语“封闭”改为“嵌套”。我做了一个快速搜索,实际上这不是封闭的例子,所以谢谢!我添加了解释为什么我使用这种嵌套模式。 –