这里有两种关系:instance of和subtype of.对于非编程类比,可以这样考虑差异.桌子上的一个苹果是"苹果"的instance.这是一个苹果的例子,特别的一个.另一方面,"苹果"作为一个概念是subtype of个"水果".每个苹果都是水果.说你桌子上的特定苹果是任何事物的子类型都不准确,因为它是特定的.说"苹果"的概念是"水果"的一个例子是没有意义的,因为它不是.
在Python中定义的每个类都是object
中的subtype,这是所有类型的类型.类itself也是Python中的一个对象,其类型为type
.后者可以用来进行一些巧妙的元编程,但这是高级Python,在这个阶段可能不需要处理.
class Foo(object):
pass
assert isinstance(Foo, type) # Foo is a type
assert issubclass(Foo, object) # Foo is a subclass of object
assert isinstance(Foo, object) # Every type (and everything in Python) is an object
assert isinstance(Foo(), Foo) # A specific foo is a Foo
assert isinstance(Foo(), object) # A specific foo is an object
现在,在学习Python时,忘记type
个存在是很安全的.它很花哨,很复杂,用于一些非常复杂的元编程技巧.现在,只需使用object
并假设类是一些神奇的东西,然后学习如何使用它们.一旦你有了坚实的基础,你就可以了解它们如何运作的细节.