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

Python:能否在父类Person内获取子类Employee的类名?如何实现?

当然可行!实现方法看这里

完全可以在父类里获取并打印子类的名称,核心是利用面向对象的多态特性——运行时程序会识别出对象的实际类型,而非编译时的声明类型。下面以Java和Python两种常见语言为例,给你具体实现方案:

Java 实现示例

class Person {
    public void printSubclassName() {
        // 获取类的简单名称(不带包路径)
        System.out.println("当前子类名称:" + getClass().getSimpleName());
        // 如果需要带包的全限定类名,换成 getName() 即可
        // System.out.println("子类全限定名称:" + getClass().getName());
    }
}

class Employee extends Person {
    // 子类可以添加自己的属性/方法,不影响父类的逻辑
}

public class Demo {
    public static void main(String[] args) {
        Employee emp = new Employee();
        emp.printSubclassName(); // 输出:当前子类名称:Employee
        
        // 注意:如果直接实例化父类,打印的就是父类自己的名称
        Person p = new Person();
        p.printSubclassName(); // 输出:当前子类名称:Person
    }
}

关键逻辑说明

getClass()是Object类的方法,它返回的是当前对象的实际运行时类。哪怕你是通过父类的方法调用它,只要对象本身是子类实例,就会返回子类的Class对象,进而拿到子类名称。

Python 实现示例

如果用Python,思路完全一致,只是语法略有不同:

class Person:
    def print_subclass_name(self):
        # __class__ 获取当前对象的类,__name__ 是类的名称
        print(f"当前子类名称:{self.__class__.__name__}")

class Employee(Person):
    pass

# 测试代码
emp = Employee()
emp.print_subclass_name() # 输出:当前子类名称:Employee

小提醒

如果你的父类是抽象类(比如Java里加了abstract修饰),那只能被子类实例化,就不会出现打印父类名称的情况了,逻辑会更严谨。

内容的提问来源于stack exchange,提问作者iso_9001_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:23:30