您现在的位置是:首页 > 文章详情

Python高级知识点学习(一)

日期:2018-10-15点击:371
img_890856394b0c0786a9cf173089e01124.png
image.png

Python中一切皆对象

和Java相比,Python的面向对象更加彻底。
函数和类也是对象,是python的一等公民。
代码和模块也可以称之为对象。
python中的类也是对象,类可以理解为模板,根据这个模板去生成我们的对象,可以动态修改类的属性。
何为一等公民?

  1. 可以赋值给一个变量
  2. 可以添加到集合对象中
  3. 可以作为参数传递给函数
  4. 可以当做函数的返回值 (生成器应用)

type、object、class之间的关系

类是由type来生成的一个对象,object是所有类都要继承的最顶层的一个基础类,type也是一个类,同时也是一个对象。
看代码片段一:

a = 1 b = "abc" print(type(1)) print(type(int)) print(type(b)) print(type(str)) 
打印出的结果: <class 'int'> <class 'type'> <class 'str'> <class 'type'> 

代码片段二:

class Student: pass class MyStudent(Student): pass stu = Student() print(type(stu)) print(type(Student)) print(int.__bases__) print(str.__bases__) print(Student.__bases__)# 打印Student基类 print(MyStudent.__bases__)# 打印Student基类 print(type.__bases__) print(object.__bases__) # 最顶层的类的基类为空 print(type(object)) 
打印出的结果: <class '__main__.Student'> <class 'type'> (<class 'object'>,) (<class 'object'>,) (<class 'object'>,) (<class '__main__.Student'>,) (<class 'object'>,) () <class 'type'> 

可以看到,类是由type来生成的一个对象。
上述代码建议反复阅读练习。

Python中常见的内置类型

首先说明对象的三个特征:

  1. 身份:也就是地址,通过id()函数查看地址
  2. 类型:int、str等
  3. 值:每个对象都有自己的值

常见内置类型:

  • None(全局只有一个),Python解释器在启动时会用None生成一个None对象。
a = None b = None print(id(a) == id(b)) 打印结果: Ture 

可以看到a,b是指向同一个对象(id相同)。

  • 数值类型:int float complex(复数) bool。
  • 迭代类型:可用for进行遍历
  • 序列类型:list、bytes、range、tuple、str、array 等
  • 映射类型:dict
  • 集合类型:set、frozenset
  • 上下文管理器:with语句
  • 其他:class、实例 等等等。

Python中的魔法函数

问:什么是魔法函数?
答:双下划线开头,双下划线结尾的这些函数,通常称之为魔法函数。
例如:


img_19be85f566d52d3de9d3a3cb45b6a9cc.png
image.png

一般魔法函数不要自定义,使用 Python 提供的即可。

使用 Python 提供的魔法函数,为了增强类的特性。

代码:使用魔法函数之前

class Company(object): def __init__(self, employee_list): self.employee = employee_list company = Company(["tom", "bob", "jane"]) for i in company.employee: print(i) 打印结果: a b c 

代码:使用魔法函数之后

class Company(object): def __init__(self, employee_list): self.employee = employee_list def __getitem__(self, item): return self.employee[item] company = Company(["a", "b", "c"]) 打印结果: a b c 

可以看到__getitem__()这个魔法函数的功能。

定义了这个魔法函数后,实例化后的对象就隐含的变为可迭代对象(iterable)。

for循环其实是要拿到一个对象的迭代器,迭代器是需要实现__iter__这个方法才会有迭代器特性,Python语法会做一些优化,如果拿不到迭代器,就会尝试去对象中找__getitem__这个方法,如果有的话就会调用这个方法,一次一次直到将数据取完。这是python语言本身解释器会完成的功能。

魔法函数调用不需要显示调用,解释器会隐式调用。

Python的数据模型

魔法函数是Python数据模型的一个概念而已,因为网络上大家喜欢称之为魔法函数。
Python数据模型会增强对象的特性。

class Company(object): def __init__(self, employee_list): self.employee = employee_list def __getitem__(self, item): return self.employee[item] def __len__(self): return len(self.employee) company = Company(["a", "b", "c"]) print(len(company)) 结果: 3 

__len__魔法函数增强了company对象的特性。

因为魔法函数很多,类似的魔法函数请大家自行去网上查找,并查看用法。

原文链接:https://yq.aliyun.com/articles/654536
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章