繁体   English   中英

Python中的类对象和类类型

[英]Class object and class type in Python

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

class My(object):

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

class My(type):

如果object类和type类相同?

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

你在 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM