嵌套 classes - 如何使用来自父 class 的函数?
nested classes - how to use function from parent class?
如果我遇到这种情况:
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函数,但是这个函数不属于class,我该如何调用这个函数?
我不想将它与 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()
Python 中的嵌套 classes 没有实际用例,但用命名空间限定某些 class 属性的范围。在这种情况下,您根本不应该创建它们的实例。
如果你有嵌套的 classes 实例,你得到的一切都是令人头疼的 - 没有任何好处。 "Outter" class 不会将它们视为任何特殊的东西——这与 C++ 不同,从这个模式的起源来看,嵌套的 class 整体上是私有的到容器 class.
Python 中私有的概念纯粹是按照惯例完成的,如果除了 Foo
之外没有其他代码应该使用 Bar
的实例,则表明通过调用它 _Bar
并在文档中。
除了嵌套之外,Bar
无法通过其名称以外的任何其他方式获得对 Foo
的引用(好吧,有使用描述符协议的方法,但它不是为了这个) - 而且他们,如果你想 运行 Foo.do_something 没有 Foo
实例,do_something
无论如何应该是一个 class 方法。
现在,如果您想要聚合 个对象,那就是另一回事了。你要做的是:
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'
如果我遇到这种情况:
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函数,但是这个函数不属于class,我该如何调用这个函数? 我不想将它与 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()
Python 中的嵌套 classes 没有实际用例,但用命名空间限定某些 class 属性的范围。在这种情况下,您根本不应该创建它们的实例。
如果你有嵌套的 classes 实例,你得到的一切都是令人头疼的 - 没有任何好处。 "Outter" class 不会将它们视为任何特殊的东西——这与 C++ 不同,从这个模式的起源来看,嵌套的 class 整体上是私有的到容器 class.
Python 中私有的概念纯粹是按照惯例完成的,如果除了 Foo
之外没有其他代码应该使用 Bar
的实例,则表明通过调用它 _Bar
并在文档中。
除了嵌套之外,Bar
无法通过其名称以外的任何其他方式获得对 Foo
的引用(好吧,有使用描述符协议的方法,但它不是为了这个) - 而且他们,如果你想 运行 Foo.do_something 没有 Foo
实例,do_something
无论如何应该是一个 class 方法。
现在,如果您想要聚合 个对象,那就是另一回事了。你要做的是:
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'