接下来会看到几个非常掉 San 的例子。
为了证明这些例子不是 trivial 的,我们可以先跑一下这段比较正常的代码:
assert isinstance(1, int)
assert isinstance(1, object)
assert not isinstance(1, str)
assert not isinstance(int, int)
assert issubclass(bool, int)
assert not issubclass(int, bool)
assert not issubclass(int, str)python接下来,再看几个 tricky 的例子暖暖脑子:
assert issubclass(int, object)
assert isinstance(int, type)
assert not issubclass(int, type)
assert not isinstance(1, type)python经过了前面的铺垫,接下来请坐稳扶好,重磅来袭:
assert isinstance(int, object)
assert isinstance(type, object)
assert isinstance(object, object)
assert isinstance(type, type)
assert type(type) is type
assert isinstance(object, type)
assert issubclass(type, object)
assert not issubclass(object, type)python要理解这段代码的内涵,以及其反映的 Python 设计哲学,请记住以下几点:
- Python 中一切实体皆对象
- 类是对象
- 函数是对象
- 变量是对象
- 字面量是对象
object是一个类,表示对象。任何对象都是一个object实例。特别地,任何类都是一个object实例。type是一个类,表示类型。任何类都是一个type的实例。特别地,object是一个type的实例。- 任何类都是一个
object的子类,因为任何类实例都是一个object实例。特别地,type是object的子类。 type是类型的类,则其子类是一部分类型的类。object是一切的类,因此不是type的子类。