Python高级知识点学习(一)

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中的魔法函数

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


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对象的特性。

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

qrcode_for_gh_60369a20e6f5_258.jpg

可以关注我的微信公众号,会更新Python知识点,也会有其他语言和软件开发中的各种坑,都会记录在公众号。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 3,805评论 0 27
  • 2017.6第15篇 星期四 晴 今天下班回来感觉很累,儿子主动去把奶给拿回来,老公把饭给做熟了,今天俩男...
    鑫隆妈妈阅读 251评论 0 0
  • 婷婷自律宝妈——日更128天 今天是中秋节,本是值得开心的日子。可是不知为何却开心不起来,很多时候,当自己境况处于...
    一切都是假象阅读 316评论 0 1
  • 有一种感受,其实是从未有过的体验。除了来自陌生异域里的新鲜劲儿,还有随之而来的匆忙与慌乱。 在排了布达拉宫的预约券...
    桔梗丽娜阅读 438评论 3 3