You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:54:02