从父 class 调用 subsclass @class 方法
Calling subsclass @classmethod from parent class
我正在尝试执行以下操作:
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'
我想从子class class A
到 __get_the_function
(class B
或 C
取决于我用的是哪一个),但看起来它正在尝试自己寻找它。
注意:我正在使用 Python 3.8.2
__
-前缀名称在 class 创建期间进行特殊处理。当函数被 defined 替换为损坏的名称时,名称将被替换,就好像您已将函数定义为
@classmethod
def test_function(cls, message):
cls._A__get_the_function()
第一。
这样做是为了明确提供一种对子class隐藏姓名的方法。由于您想要 覆盖该名称,因此__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
我正在尝试执行以下操作:
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'
我想从子class class A
到 __get_the_function
(class B
或 C
取决于我用的是哪一个),但看起来它正在尝试自己寻找它。
注意:我正在使用 Python 3.8.2
__
-前缀名称在 class 创建期间进行特殊处理。当函数被 defined 替换为损坏的名称时,名称将被替换,就好像您已将函数定义为
@classmethod
def test_function(cls, message):
cls._A__get_the_function()
第一。
这样做是为了明确提供一种对子class隐藏姓名的方法。由于您想要 覆盖该名称,因此__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