如何从 __init__ 访问 __init_subclass__ 中的变量?

Posted

技术标签:

【中文标题】如何从 __init__ 访问 __init_subclass__ 中的变量?【英文标题】:How to access variables made in __init_subclass__ from __init__? 【发布时间】:2021-12-10 22:28:25 【问题描述】:

这里是示例代码:

from abc import *


class weightlayer(metaclass=ABCMeta):
    def __init_subclass__(cls):
        cls.count = 0

    def __init__(self):
        self.order = cls.count
        cls.count += 1

    @abstractmethod
    def init_weight(self):
        pass


class A_layer(weightlayer):
    def init_weight(self):
        pass


class B_layer(weightlayer):
    def init_weight(self):
        pass

我已经搜索了很多次,但我找不到解决方案。 我的想法不起作用,因为__ init __ 函数没有cls 参数。 我该怎么办?

【问题讨论】:

【参考方案1】:

__init__是一个实例方法,所以你必须通过实例self来访问实际的类:

def __init__(self):
    self.order = self.__class__.count
    self.__class__.count += 1

a1 = A_layer()
A_layer.count
# 1
a1.order
# 0
a2 = A_layer()
A_layer.count
# 2
a2.order
# 1
B_layer.count
# 0

【讨论】:

以上是关于如何从 __init__ 访问 __init_subclass__ 中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 __init__ 调用属性设置器

在 __main__.py 中使用模块自己的对象

我可以使用 __init__.py 来定义全局变量吗?

从 PyQt 中的 contextMenuEvent 访问列名

从__init__.py中的函数导入模块将模块对象绑定到全局命名空间?

在 Python 中从 __init__ 调用 setter