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_
相关产品推荐
相关产品推荐

