Python中的类对象和类类型

Cem*_*mre 2 python class

我是 Python 新手,我有一个关于 OOP 的问题。因此,当我们创建一个类时,我们在括号中写入“对象”。例如,

\n
class My(object):\n
Run Code Online (Sandbox Code Playgroud)\n

我在某处读到这意味着该类继承自objectPython 中的类。但我也读到,我们创建的每个类都是该类的一个实例type。所以我的问题是object类与类相同type,如果是,为什么当要求Python打印类的类型时,它返回<class \'type\'>而不是返回<class \'object\'>。另外,为什么我们可以\xe2\x80\x99t写

\n
class My(type):\n
Run Code Online (Sandbox Code Playgroud)\n

如果object班级和type班级是同一个?

\n

Sil*_*olo 5

这里有两种关系:实例子类型。对于非编程类比,您可以这样思考差异。桌子上的一个特定苹果是“苹果”的一个实例。这是苹果的一个例子,就是那个苹果。另一方面,“苹果”作为一个概念是“水果”的子类型。每个苹果都是一种水果。说你桌上的特定苹果是任何东西的子类型是不准确的,因为它是一个特定的苹果。说“苹果”的概念是“水果”的一个实例是没有意义的,因为它不是。

你在Python中定义的每个类都是的子类型object,它是所有类型的类型。类本身在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
Run Code Online (Sandbox Code Playgroud)

目前,当您学习 Python 时,忘记type存在是相当安全的。它很奇特且复杂,用于一些非常复杂的元编程技巧。现在,只需使用object并假设类是一些神奇的东西,然后学习如何使用它们。一旦你有了坚实的基础,你就可以了解它们如何工作的具体细节。