我是Python新手,我对OOP有一个问题.所以,当我们创建一个类时,我们在括号中写"object".例如

class My(object):

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

class My(type):

如果object级和type级相同?

推荐答案

这里有两种关系:instance ofsubtype 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并假设类是一些神奇的东西,然后学习如何使用它们.一旦你有了坚实的基础,你就可以了解它们如何运作的细节.

Python相关问答推荐

Pandas - groupby字符串字段并按时间范围 Select

Telethon加入私有频道

如何请求使用Python将文件下载到带有登录名的门户网站?

OR—Tools中CP—SAT求解器的IntVar设置值

将JSON对象转换为Dataframe

在单个对象中解析多个Python数据帧

Polars将相同的自定义函数应用于组中的多个列,

Python—转换日期:价目表到新行

在代码执行后关闭ChromeDriver窗口

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

Flask运行时无法在Python中打印到控制台

如果包含特定值,则筛选Groupby

如何在Gekko中使用分层条件约束

如何删除重复的文字翻拍?

如何反转一个框架中列的值?

如果列包含空值,则PANAS查询不起作用

有什么方法可以在不对多索引DataFrame的列进行排序的情况下避免词法排序警告吗?

如何将参数名作为参数传入到函数中?

更改Python中的数据格式

如果init被重载,如何输入提示一个基于init的函数的返回类型