如果我遇到这种情况:
class Foo(object):
def __init__(self):
self.bar = Bar()
def do_something(self):
print 'doing something'
class Bar(object):
def __init(self):
self.a = 'a'
def some_function(self):
我想在some_function函数中调用do_something函数,但是这个函数不属于该类,我该怎么做才能调用这个函数? 我不想在Foo()。do_something中使用它,还有其他选择吗? 我不想创建新实例
另一个例子:
class A(object):
def __init__(self):
self.content = 'abcdabcabcabc'
self.b = self.B()
self.c = self.C()
def some_function(self):
print self.content
class B(object):
def foo(self):
A.some_function()
class C(object):
def foo(self):
A.some_function()
答案 0 :(得分:0)
Python中的嵌套类没有实际用例,但是使用命名空间来限定某些类属性。在这种情况下,你根本不应该创建它们的实例。
如果你有嵌套类的实例,那么你得到的就是头疼 - 没有任何好处。 " Outter" class不会把它们视为特别的东西 - 这与C ++不同,它看起来就是这个模式的起源,嵌套类在整体上是对容器类的私有。
在Python中私有的概念完全按照约定完成,如果除了Foo
之外没有其他代码应该使用Bar
的实例,请通过调用_Bar
并在文档。
除了嵌套之外,不会通过任何其他方式帮助Bar
获取Foo
的引用而不是通过其名称(好的,有使用描述符协议的方法,但它并不意味着这一点) - 如果你想在没有Foo
实例的情况下运行Foo.do_something,那么do_something
应该是一个类方法。
现在,如果你想拥有聚合的对象,那就另当别论了。你要做的是:
class Bar(object):
def __init(self, parent):
self.parent = parent
self.a = 'a'
def some_function(self):
self.parent.do_something(...)
class Foo(object):
def __init__(self):
self.bar = Bar(self)
def do_something(self):
print 'doing something'