Python父类继承方法中如何获取子类名称作为参数使用
解决方案
你可以通过实例的self.__class__.__name__属性拿到当前调用方法的子类名称,同时需要先修正原代码的几个语法和逻辑问题:
- 实例方法
go_back必须显式声明第一个参数self,否则调用时会报错 - 原
map字典在定义时引用了还未声明的类C,会直接抛出NameError - 如果你希望每次调用
go_back都触发对应类的__init__,应该在map中存储类本身,而非预先生成的实例(预生成实例的话__init__在字典定义阶段就已经执行过了) - 不要用
map作为自定义变量名,map是Python内置函数,会发生命名冲突
修改后的可运行代码如下:
class Scene(): def go_back(self): # 获取当前子类的类名 child_class_name = self.__class__.__name__ prev_cls = scene_map.get(child_class_name) if prev_cls: # 实例化对应类,触发__init__ return prev_cls() class A(Scene): def __init__(self): print("This is class A") class B(Scene): pass class C(Scene): pass scene_map = { "B": A, "C": B, "D": C, "U no": "de drill" } x = B() x.go_back() # 输出 This is class A
运行x.go_back()时会自动获取实例x的类名B,从映射表中取到对应类A,实例化阶段就会执行A的__init__方法,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Necryl
相关产品推荐
相关产品推荐

