从父类调用子类@classmethod

问题描述 投票:0回答:1

我正在尝试执行以下操作:

class A:

    @classmethod
    def test_function(cls, message):
      cls.__get_the_function()

class B(A):

    @classmethod
    def __get_the_function(cls):
        return print("BBBB")


class C(A):

    @classmethod
    def __get_the_function(cls):
        return print("CCCC")

但是我打给您:

B.test_function("Test")

我得到以下内容:

AttributeError: type object 'B' has no attribute '_A__get_the_function'

我希望从子类中将类A转换为__get_the_function(类B还是C取决于我使用的类,但看起来它正在尝试自己寻找它。

注意:我正在使用Python 3.8.2

python python-3.x class-method
1个回答
0
投票

__前缀的名称是在创建类时特别处理的。当函数是defined时,名称将被替换为假名,就好像您已将函数定义为[]一样

@classmethod
def test_function(cls, message):
    cls._A__get_the_function()

首先。

这样做是为了明确提供一种从子类中隐藏名称的方法。由于您want

覆盖名称,因此__get_the_function不是合适的名称;如果要将其标记为私有,请使用普通的_前缀名称:
class A:

    @classmethod
    def test_function(cls, message):
      cls._get_the_function()

    # Define *something*, since test_function assumes it
    # will exist. It doesn't have to *do* anything, though,
    # until you override it.
    @classmethod
    def _get_the_function(cls):
        pass
© www.soinside.com 2019 - 2024. All rights reserved.