如何比较python中的两个类/类型? [英] How to compare two classes/types in python?

查看:53
本文介绍了如何比较python中的两个类/类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在模块 classes.py 中定义了两个类:

class ClassA(object):经过类 ClassB(对象):经过

在另一个模块中,我获得了模块的属性:

导入类Class1 = getattr(classes, 'ClassA')Class2 = getattr(classes, 'ClassA')打印类型(Class1) == 类型(Class2)Class3 = getattr(classes, 'ClassA')Class4 = getattr(classes, 'ClassB')打印类型(Class3) == 类型(Class4)

两种类型比较都返回 True,这不是我所期望的.

如何使用 python 的本机类型值比较类类型?

解决方案

说明

这就是您的比较没有按预期工作的原因

<预><代码>>>>类 ClassA(对象):... 经过...>>>类 ClassB(对象):... 经过...>>>类型(B类)<类'类型'>>>>类型(A类)<类'类型'>>>>类型(A 类)== 类型(B 类)真的

但是为什么ClassAClassB 有相同的类型type?引用 docs:

<块引用>

默认情况下,类是使用 type() 构造的.班级主体是在新的命名空间中执行,并且类名在本地绑定到类型(名称、基类、命名空间)的结果.

示例:

<预><代码>>>>B级<class '__main__.ClassB'>>>>type('ClassB', (), {})<class '__main__.ClassB'>>>>类型(B类)<类'类型'>>>>类型(类型('ClassB',(),{}))<类'类型'>

获取ClassB的类型和获取type('ClassB', (), {})的类型完全一样,也就是type.

解决方案

直接比较它们(不使用 type() 函数):

<预><代码>>>>A类<class '__main__.ClassA'>>>>B级<class '__main__.ClassB'>>>>A类==B类错误的

或初始化它们并比较它们的对象类型:

<预><代码>>>>a = ClassA()>>>b = ClassB()>>>类型(一)<class '__main__.ClassA'>>>>类型(b)<class '__main__.ClassB'>>>>类型(a) == 类型(b)错误的

FWIW 你也可以使用 is 代替 ==(对于类).

I have two classes defined in a module classes.py:

class ClassA(object):
    pass

class ClassB(object):
    pass

And in another module I am getting the attributes of the module:

import classes

Class1 = getattr(classes, 'ClassA')
Class2 = getattr(classes, 'ClassA')
print type(Class1) == type(Class2)

Class3 = getattr(classes, 'ClassA')
Class4 = getattr(classes, 'ClassB')
print type(Class3) == type(Class4)

Both type comparison are returning True and that's not what I was expecting.

How can I compare class types using python's native type values?

解决方案

Explanation

This is why your comparison doesn't work as expected

>>> class ClassA(object):
...     pass
... 
>>> class ClassB(object):
...     pass
... 
>>> type(ClassB)
<class 'type'> 
>>> type(ClassA)
<class 'type'> 
>>> type(ClassA) == type(ClassB)
True

But why do ClassA and ClassB have the same type type? Quoting the docs:

By default, classes are constructed using type(). The class body is executed in a new namespace and the class name is bound locally to the result of type(name, bases, namespace).

Example:

>>> ClassB
<class '__main__.ClassB'>
>>> type('ClassB', (), {})
<class '__main__.ClassB'>
>>> type(ClassB)
<class 'type'>
>>> type(type('ClassB', (), {}))
<class 'type'>

Getting the type of ClassB is exactly the same as getting the type of type('ClassB', (), {}), which is type.

Solutions

Compare them directly (w/out using the type() function):

>>> ClassA
<class '__main__.ClassA'>
>>> ClassB
<class '__main__.ClassB'>
>>> ClassA == ClassB
False

or initialize them and compare the types of their objects:

>>> a = ClassA()
>>> b = ClassB()
>>> type(a) 
<class '__main__.ClassA'>
>>> type(b) 
<class '__main__.ClassB'>
>>> type(a) == type(b)
False

FWIW you can also use is in place of == (for classes).

这篇关于如何比较python中的两个类/类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆