如何在嵌套 class 中调用静态方法?

How do I call a static method within a nested class?

我有两个类,一个是Parent,一个是Child

Child中,我有两个静态函数,foo()bar()。 在foo(),我想打电话给bar()

但是由于Child是嵌套的,所以我不能用常规的方式调用它。

Class Parent:

    Class Child:

        @staticmethod
        def foo():
            Child.bar() #Doesn't work

        @staticmethod
        def bar():
             pass

在嵌套的 class 中调用静态函数时,您还必须引用父项。

Class Parent:

    Class Child:

        @staticmethod
        def foo():
             Parent.Child.bar()

        @staticmethod
        def bar():
            pass

有两种主要方法可以实现您的目标:

  1. 像这样引用 ParentChild classes:

    class Parent:
    
        class Child:
    
            @staticmethod
            def foo():
                Parent.Child.bar()
    
            @staticmethod
            def bar():
                 pass
    
  2. 使用由解释器创建的隐式 __class__ 单元格 based on lexical scoping:

    class Parent:
    
        class Child:
    
            @staticmethod
            def foo():
                __class__.bar()
    
            @staticmethod
            def bar():
                pass
    

这两种方式在 Python 3.x 中都是完全可行的。

有 3 个注意事项:

  1. 过度使用静态方法有时表明存在设计缺陷,在这种情况下,外部独立函数将是更好的选择。

  2. None 的方法将与继承一起使用。如果Parent.Child是继承自,Parent.Child.bar()会引用同老class的方法,而__class__会显示同原Parent.Childclass , 因为使用了词法范围。

  3. 如果使用某些 class 装饰器,第一种方法将导致无限递归。使用 __class__ 可确保您引用了真正的原始 class,并且可能有助于消除该问题。

您错误地将 Child class 的命名空间放在 Parent class 中,并将 Child class 从Parent class.

您可以像这样从 Parent 扩展 Child class:

class Parent:
    a = 1

class Child(Parent):
    pass

>>> Child.a
1

与静态方法相同。