如何判断Python中Foo类实例使用的是哪个Parent子类?
解决方案:判断Foo实例使用的子类类型
嘿,别担心,作为编程新手遇到这类问题太正常啦~我来帮你理清楚怎么解决这个判断问题。
首先看你的代码,Foo类的__init__方法里,self.child存储的是你传入的类本身(比如Child_1这个类对象),而不是类的实例。所以完全不需要去遍历__dict__.values(),直接访问tester.child就能拿到这个类对象,然后直接比较就行。
方法一:直接比较类对象
你可以直接写出这样的判断逻辑,简单又直接:
tester = Foo(4, Child_1) if tester.child is Child_1: print("执行Child_1对应的操作") elif tester.child is Child_2: print("执行Child_2对应的操作")
为什么之前的循环方式不好?因为tester.__dict__.values()里包含两个元素:4(你的input值)和Child_1(类对象),循环的时候会先碰到4,判断4 is Child_1显然不成立,完全是多余的步骤。直接访问tester.child才是最直接的方式。
方法二:如果需要判断实例类型(扩展场景)
如果后续你的Foo类会创建Child_1/Child_2的实例,并且想判断这个实例的类型,可以用isinstance()函数。比如修改Foo类来保存实例:
class Foo: def __init__(self, input, child): self.input = input self.child = child self.child_instance = None # 用来保存创建的子类实例 def method(self): self.child_instance = self.child(self.input) return self.child_instance tester = Foo(4, Child_1) tester.method() # 创建实例并保存 if isinstance(tester.child_instance, Child_1): print("当前实例是Child_1的对象") elif isinstance(tester.child_instance, Child_2): print("当前实例是Child_2的对象")
isinstance()是判断一个对象是否属于某个类(或其子类),适合处理实例类型的判断场景,而is是比较两个对象是不是同一个实体(这里类对象是单例的,所以用is比较类完全没问题)。
小总结
根据你当前的代码结构,**直接比较tester.child和Child_1/Child_2**就是最简单有效的解决方案,不用绕去遍历字典。
内容的提问来源于stack exchange,提问作者Charlie Vagg
相关产品推荐
相关产品推荐

