我有两个班级,一个是Parent
,另一个是Child
。
在Child
中,我有两个静态函数foo()
和bar()
。
我想在foo()
中打电话给bar()
。
但是由于Child
是嵌套的,所以我不能使用常规方式来调用它。
Class Parent:
Class Child:
@staticmethod
def foo():
Child.bar() #Doesn't work
@staticmethod
def bar():
pass
答案 0 :(得分:1)
有2种主要方法可以实现您想要的目标:
同时引用Parent
和Child
类:
class Parent:
class Child:
@staticmethod
def foo():
Parent.Child.bar()
@staticmethod
def bar():
pass
使用由解释器based on lexical scoping创建的隐式__class__
单元格:
class Parent:
class Child:
@staticmethod
def foo():
__class__.bar()
@staticmethod
def bar():
pass
这两种方式在Python 3.x中都是完全可行的。
有3个警告:
过度使用静态方法有时表明存在设计缺陷,在这种情况下,外部独立功能将是更好的选择。
所有方法都不能与继承一起使用。如果从Parent.Child
继承,则Parent.Child.bar()
将引用同一旧类的方法,而__class__
将显示相同的原始Parent.Child
类,这是使用词法作用域的。 / p>
如果使用某些类装饰器,则第一种方法将导致无限递归。使用__class__
可以确保您引用的是真正的原始类,并且可以帮助消除该问题。
答案 1 :(得分:1)
通过将java.sql.SQLException: Unknown initial character set index '192' received from server.
类扩展到Child
类中,将Parent
类的命名空间放在Child
类中是错误的。
您可以像这样从Parent
扩展Child
类:
Parent
与静态方法相同。
答案 2 :(得分:0)
在嵌套类中调用静态函数时,还必须引用父级。
Class Parent:
Class Child:
@staticmethod
def foo():
Parent.Child.bar()
@staticmethod
def bar():
pass