如何在Python的__init__方法中访问__init_subclass__内定义的变量
问题解决方法
要在实例的__init__方法中访问当前实例所属的类,直接调用self.__class__即可,这个属性就对应你需要的类对象cls。
你只需要把__init__方法里的cls替换成self.__class__就能实现需求:
from abc import * class weightlayer(metaclass=ABCMeta): def __init_subclass__(cls): cls.count = 0 def __init__(self): # 用self.__class__获取当前实例对应的类 self.order = self.__class__.count self.__class__.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
效果验证
你可以用下面的代码测试计数逻辑是否符合预期:
# 测试示例 a1 = A_layer() a2 = A_layer() b1 = B_layer() a3 = A_layer() print(a1.order) # 输出:0 print(a2.order) # 输出:1 print(a3.order) # 输出:2 print(b1.order) # 输出:0,不同子类的计数完全独立
这个方案不需要修改你原有的继承逻辑和__init_subclass__的实现,所有子类会自动维护独立的实例计数,完全符合你最初的设计思路。
内容的提问来源于stack exchange,提问作者string
相关产品推荐
相关产品推荐

