Python 嵌套类-如何使用父类中的函数?
如果我遇到这种情况:Python 嵌套类-如何使用父类中的函数?,python,python-2.7,class,oop,inner-classes,Python,Python 2.7,Class,Oop,Inner Classes,如果我遇到这种情况: 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):
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):
我想在某个函数中调用do_something函数,但该函数不属于该类,我该如何调用该函数?
我不想和Foo()一起使用它。做点什么,还有其他选择吗?
我不想创建新实例
另一个例子:
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()
Python中的嵌套类没有实际的用例,但用于使用名称空间限定某些类属性的范围。在这种情况下,您根本不应该创建它们的实例 如果你有嵌套类的实例,你所得到的只是一个头疼的问题——没有benneffit。“Outter”类不会把它们看作是任何特殊的东西,这与C++中的不同,从这个模式看来,嵌套类在容器容器中是私有的。 Python中私有的概念完全是按照惯例来实现的,如果除了
Foo
之外没有其他代码应该使用Bar
的实例,那么在文档中通过调用\u Bar
来表示
除此之外,嵌套将无助于Bar
通过其名称以外的任何其他方式获取对Foo
的引用(好的,有一些方法使用描述符协议,但并不适用于此)-如果您想在没有Foo
实例的情况下运行Foo.do\u something,无论如何,dou\u something
应该是一个classmethod
现在,如果您想拥有聚合对象,那是另一回事。你要做的是:
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'
Foo
不是Bar
的“父项”。Python中的嵌套类除了一个额外的作用域外,并不能真正为您带来任何好处。如果您不想将其作为实例方法调用,那么就不要将其作为实例方法。我用另一个示例编辑我的问题,什么是做这件事的最佳方法?您不应该使用嵌套类开始,我在这里放了一个s: