【发布时间】:2020-01-29 19:03:40
【问题描述】:
我正在尝试将我的函数组织到类中。我想在“内部”类中使用“外部”类的属性 self.file_list。
class Outer:
"""Outer Class"""
def __init__(self, file_list):
self.file_list=file_list
## instantiating the 'Inner' class
self.inner = self.Inner()
## inner class
class Inner:
"""First Inner Class"""
def __init__(self):
print (Outer.file_list) <-- this line doesn't work
pass
clean =Outer (['cats', 'dogs'])
但是我得到了这个错误:
<ipython-input-63-0dfab321da74> in __init__(self)
10 """First Inner Class"""
11 def __init__(self):
---> 12 print (self.file_list)
13
14 pass
AttributeError: 'Inner' object has no attribute 'file_list'
如何在内部 init 方法中访问 self.file_list 属性? 或者在一个类中将函数组合在一起的传统方法是什么?
【问题讨论】:
-
内部类和外部类的实例之间没有隐式关系,所以你必须自己建立这种关系(例如在构造
Inner时传递一个parent参数,做一个Outer中的工厂函数,它设置了Inner的成员等)或者根本不依赖这种关系,只传递你关心的数据。 -
传统的方式是不这样做。
-
为什么不呢?创建内部类没有任何正当理由吗?例如,Django 在其许多类中都使用了内部 Meta 类。