issubclass的用法

4
>>> import sys
>>> sys.version_info
(2, 4, 4, 'final', 0)
>>> class C:
...    pass
...
>>> issubclass(C, C)
True
>>> issubclass(C, object)
False
>>> class T(object):
...    pass
...
>>> issubclass(T, T)
True
>>> issubclass(T, object)
True
>>>

问题1:> 为什么 CC 的子类?

问题2:> C 的基类是什么?

谢谢。

// 更新 Chris Morgan(至少对我来说,以下手册没有任何帮助)

>>> help(issubclass)
Help on built-in function issubclass in module __builtin__:

issubclass(...)
    issubclass(C, B) -> bool

    Return whether class C is a subclass (i.e., a derived class) of class B.
    When using a tuple as the second argument issubclass(X, (A, B, ...)),
    is a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).

在像 issubclass 这样的问题上,始终要记得先阅读文档。 - Chris Morgan
3个回答

7
请查看issubclass(class, classinfo)文档,该函数用于判断一个类是否是另一个类的子类(直接、间接或虚拟)。一个类被认为是其自身的子类。如果classinfo是一个类对象的元组,则会检查classinfo中的每个条目。否则,将引发TypeError异常。
要检查C的基类,请使用inspect.getmro(cls)函数。
该函数返回一个元组,其中包括cls类及其基类,按照方法解析顺序排列。
   >>> class C(object):
...        pass
...
>>> inspect.getmro(C)
(<class '__main__.C'>, <type 'object'>)
>>>

2
从这个链接中可以得出,“一个类被认为是它自己的子类。”
回答你的第二个问题,C是一种“旧式”类,因此它不是object的子类。如果你想要一个新式类,请将object作为超类包含进去。请参阅http://www.python.org/doc/newstyle/了解更多信息。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接