最新python中的type和object详解_python3,2024年最新字节跳动上千道精选面试题还不刷起来

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

在这里,我来解释一下为什么叫"虚线向上规则",通过观察上图右边,我们可以清晰地见到一个带箭头的虚线,从X端出发,射向A端,此时,A端为箭头端,虚线代表类型实例关系,所以A端是类型,即X是A的实例(换句话说,A是X的类型),通过命令X.__class__我们可查看X的类型。再看,一条带箭头的实线从A端射向B端,B端是箭头端,实线代表父子关系,所以B端是父类,即A是B的子类。这时候,我们通过将X端射向A端的虚线,向上抬,射向B端(你应该可以看到上图右上方有一条标志为implied[这个单词意思是隐藏]的向上虚线),就实现了表述X也是是B的实例的目的。也名副其实,虚线向上嘛。虚线向下规则也可以这样推出来,我就不演示了。

总的来说,面向对象体系里,有两种关系,一种是父子关系,通过父类与子类来描述,另一种是类型实例关系,通过类和实例来描述。而两条规则,是将类之间,类与实例之间的关系联系在一起。

到这里,可以进入主题了。

基本概念

对象内部:The Object Within

上面我们说了面向对象,那么对象(object)是什么呢?对象是python的重要核心之一:它是某个实体的抽象描述。对象拥有下面的特征:

身份(Identity):给定两个名字,我可以肯定地说,要么它们是指向同一个对象,要么不是;

值(A value):这意味着对象包含一堆属性。我们可以通过objectname.attributename的方式操作属性;

类型(A type):每个对象都有一个确切地类型。例如,对象“2”的类型是int;

一个或多个“Bases”(One or more bases):不是所有对象都有Bases,但一些特殊的对象会有,比如:。Bases类似于面向对象语言中的“基类”,“超类”。

如果你想知道一个对象在内存中的位置,你可以调用id(对象)来查看。在这里,我再次强调,在python中,一切都有对象的概念。数字2是对象,类型int也是对象…

type和Bases(如果它们存在)非常重要,因为它们定义了一个对象和另一个对象之间的关系。请记住,type和Bases本身也是对象,稍后会提到。

你也许会认为,对象有名字,但名字并不是对象的组成部分。对象的名字存在于这个对象的命名空间(namespace)之外或者是另一个对象的属性。也就是说:名字和这个对象不是存储在同一个“地方”

例子:测试一个整数对象

(1):我们在当前命名空间给数字2分配一个名字。并将2和“two”绑定在起。

(2):这个对象的类型是<class ‘int’>。你会在其它地方见到类似<type ‘int’>,int这样的输出,其实它们都是一个意思。

(3):额,<class ‘int’>的类型是<class ‘type’>.

(4):输出“类int”的基类。

(5):列出整型这个对象所有的属性。

可能会觉得有点乱,我稍微总结一下:数字2是类型int(一般来讲,在python中“类”和“类型”是同一种东西)的一个实例。倒过来说,int是数字2的类型。元组(<class ‘object’>,)是类型int的超类(或说父类)。一个类型的超类可能不止一个,所以用元组表示。

现在,我们引出第一条规则:

一切皆为对象

上面说的数字2,类型int,int的超类<class ‘object’>都是对象。除此之外,你定义的函数,方法…都是对象。

一块干净的画板

现在我们来建立python的对象系统。从一块干净的画板开始…,画板分为三部分,从左到右,分别代表类的类,类,类的实例。

我们会在这个画板中开启我们的学习之旅…

关系(Relationships)

我们谈及对象时,用两种关系来连接各种对象,使得对象之间产生联系:

父子关系( the subclass-superclass relationship);

类型实例关系( the type-instance relationship )。

在文章开头已经详细讨论过这两种关系了。

进入对象( Bring In The Objects)

第一个对象

我们测试两个对象:object和type:

例子1:

(1),(2):python中的两个源对象的名字。我们先前说过type()是用来获对象的类型的。事实上,它既是一个对象,也是获取其它对象的类型的方法

(3),(4):查看object的类型。看到object是type的实例,我们另外也用.__class__来核实它和type()的输出是一样的。

(5):object没有超类,因为它本身就是所有对象的超类。

(6),(7):分别输出type的类型和超类。即,object是type的超类。type的类型是它自己

我们把例子1获取的信息描述在画板上:

object和type是python中的两个源对象,当我们尝试介绍它们是就会陷入“先有鸡还是现有蛋”难题,到底先介绍谁?事实上,它们是互相依赖对方来定义,所以它们不能分开而论。

继续我们的python实验:

(1):发生了什么?其实这里利用了虚线向上规则,type是object的子类,type的实例自然也是object的实例。object是type的实例啊。

(2):这里我参考的英文文档解释是:同时应用虚线向上和虚线向下规则。但我看得一脸懵逼。因为我觉的这里和(1)一样啊:type是object的子类,type的实例自然也是object的实例。type也是type的实例啊。

如果你认为上面的解释很混乱,不用理会它。不影响你理解这篇文章的主要目的。

新概念: type objects

type和object都属于type objects。type objects翻译过来就是类型对象了。类型对象的特征:

它们用于表示程序中的抽象数据类型。例如,我们定义的一个类User会代表系统中所有的用户。int会代表系统中所有整形数字。

它们能被继承。这意味着你可以利用存在的类型对象创造出新的类型对象。已经存在的类型对象是新的类型对象的超类。

它们能被实例化。这意味着你可以利用已经存在的类型对象创造出新的实例对象。前者是后者的type。

类型对象的类型是type

它们有时会被成为类型有时会被称为

你没有看错。在新版本的python中类和类型已经是同一样东西了。由一个很明显的地方就可以看出来。__class__和type()的输出是一样的。

在旧版本的python中,类是特指用class语句创造出来的东西。而内置类型例如int一般不会被认为是类,而是被认为是类型。但在新版本中它们是同一样东西了。我觉得有必要为这个改变定义一条规则:

类是类型,类型也是类(Class is Type is Class)

在>=2.3版本的python中,类和类型是同一样东西。

The term type is equivalent to the term class in all version of Python >= 2.3.

类型和非类型(或者说类和非类)都是对象,但只有类型能够被继承。非类型拥有具体的值,所以被继承是毫无意义的,而且它也不能被继承。做简单的例子,就是类型int和它的实例2。int是类型,2是非类型。你说说,继承2有什么意义?

是否还是会疑惑到底社么是类型?什么是非类型?

这里有一条判断规则送给你:

如果一个对象,它的类型是“<class ‘type’>”,那么,它是类型,否则不是。

还记得怎么判断一个对象的类型吗?没错的,__class__和type()随意你用。

小总结:

的类型是;

的父类为空;

的类型是它自己本身;

是的子类;

在python中只要两种对象:类型和非类型。非类型也被称为实例。这里有英文原句,我不知怎么翻译了,很容易看懂,但不知如何说:There are only two kinds of objects in Python: to be unambiguous let’s call these types and non-types. Non-types could be called instances, but that term could also refer to a type, since a type is always an instance of another type. Types could also be called classes, and I do call them classes from time to time.

注意我们在画板中只画出两个对象的直接关系,隐藏的关系就不画了,节省我们的精力和画板尺寸

更多内置对象

python这条船上可不止只有两个源对象。通过这两个源对象可以繁育出一堆对象:

Figure 2.2. 一些内置对象

上图中的一些内置类型,下面通过例子来测试:

(1):内置对象list;

(2):list的类型是;

(3):list的超类是(,);

(4):内置对象tuple.tuple的类型和超类分别是:, (,);

(5)list的一个实例mylist;

(6)实例mylist的类型是;

(7)实例没有超类。

我们可以创造一个tuple或dict的实例,但我们不能创造一个mylist的实例。因为mylist不是一个类型,它仅仅是一个实例。

通过继承产生新对象

内置类型是python本身就有的。那么我们如何创造一个新的类型呢?

新的类型不能够凭空产生,它必须依赖已经存在的类型,于是,继承就呼之欲出了。

例子:通过继承产生新对象

(1):class语句告诉python解释器要通过一个存在的类型创造一个新的类型;

(2):在python3.x可以省略掉(object)。

(3):多重继承;

(4):大多数内置类型可以被继承,但不是所有的都可以。

通过实例化产生新对象

Example 2.5.

(1),(2):利用类型名()的方式创造一个类型的实例。()中可能带参数;

(3):这是python利用内置类型创造实例的语法。没什么好说的。

注意:仅仅通过对<class ‘object’>进行子类化,类型C就自动成为<class ‘type’>的实例。原因在常见疑问的第二个问题中。

在以上的操作后,原本空白的画板可以画满了:

常见疑问

到这里你头脑中可能会有很多疑惑,下面列出其中一些问题以及答案,请酌情欣赏。有没有提到的请留言,我会努力搜索答案来解答:

Q: Python如何真正创建一个新对象?

A: 在python中,创造的新对象有两种:类型和非类型。类型可被继承和实例化。非类型本事就是一个实例。当python创造新对象时,它会用自己本身的类型作为新对象的类型。一般会用到两个方法__new__()和__init__()。所以。每个对象都有类型。

Q:实例化的时候要指定类型,但是当继承时python如何知道用哪个类型?

它查看你继承的超类,并且使用超类的类型来作为新对象的类型。

在大多数的情况下,<class ‘object’>的子类(和<class ‘object’>的子类的子类等等)的类型都是<class ‘type’>

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

.csdnimg.cn/afc935d834c5452090670f48eda180e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5aqb56eD56eD,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值