Python高级编程(7):鸭子类型和多态
这个概念的名字来源于James Whitcomb Riley提出的鸭子测试:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
我们先来看一段代码:
12345678910111213141516171819202122232425class Dog(object): def say(self): print("I am a dog")class Cat(object): def say(self): print("I am a cat")class Duck(object): def say(self): print("I am a duck")animal_list = [Dog, Cat, Duck]for animal in animal_list: animal().say()# 输出结果:I am a dogI am a catI am a duck
在上面的例子里面,3个类彼此之间没有任何的继承关系(除obj ...
Python高级编程(6):python魔法函数一览
前面说了那么多python的魔法函数,那么具体的魔法函数都有哪些呢?我在这里详细的列举出来。总的来说分为两大类,数学运算和非数学运算,下面就分别列举:
数学运算一元运算符:neg__(-)、__pos__(+)、__abs二元运算符:lt(<)、 __le__ <= 、 __eq__ == 、 __ne__ != 、 __gt__ > 、 ge >=
算术运算符:add + 、 sub - 、 mul * 、 truediv / 、 floordiv // 、 mod % 、 divmod divmod() 、 pow ** 或 pow() 、 round round()
反向算术运算符:radd 、 rsub 、 rmul 、 rtruediv 、 rfloordiv 、 rmod 、rdivmod 、 rpow
增量赋值算术运算符:iadd 、 isub 、 imul 、 itruediv 、 ifloordiv 、 imod 、ipow
位运算符:invert ~ 、 lshift << 、 __rshift__ >> 、 and ...
Python高级编程(5):python数据模型对python的影响
python数据模型其实就是python中内置的对象模型,那些内置的对象模型我们在之前进行过说明。python中内置的对象模型具有一些特殊方法,也就是我们前面说的魔法函数。
简单来说,Python数据模型就是Python内置的数据类型及其包含的特殊方法(魔法函数)。举个例子来说,我们在使用len()这个函数时,会调用__len__这个魔法函数;使用list[]时会调用__getitem__魔法函数;使用各类运算符也会调用其相对应的魔法函数。从根本上来说,list[ ]、+、-、*、/、for i in x这些写法只是为了更简洁和更具有可读性,但内部跟其他操作是一样的,也是通过特定方法(算法)来实现的,这就是魔法函数。
我们来看下面的一段代码:
1234567891011121314class Company(object): def __init__(self, employee_list): self.employee = employee_list def __getitem__(self, item): return self.employ ...
Python高级编程(4):什么是魔法函数?
什么是魔法函数?魔法函数它是一个网络术语,实际上是属于Python数据模型的概念。你只要记住魔法函数的作用就是增强你自定义类的功能。一般都会满足两个条件:1.双下划线开头,双下划线结尾:比如__init__, __str__,__len__等 ;2.定制类的特性, 看下面的例子你就知道了:
1234567891011121314# 遍历该公司的员工class Company(object): def __init__(self, employee_list): self.employee = employee_listcompany = Company(["tom", "bob", "jane"])for employee in company.employee: print(employee)# 输出结果:tombobjane
现在我们来使用魔法函数,来增强我们这个Company类的功能(注意魔法函数不属于object,也不属于Company,只是用来增强某种功能而添加的)。这里我们使用魔法函数来让 ...
Python高级编程(3):python中常见的内置类型
前面说过python中的对象具有3个特征:身份,类型和值。下面我们就来谈一谈Python中常见的内置类型。首先是None,这个全局唯一的一个类型,在内存中只有一个:
1234>>> a =None>>> b =None>>> id(a)==id(b)True
其次是数值类型:int,float,complex(复数),bool。
然后就是迭代类型,关于迭代类型我们将在后面迭代器的部分进行详细介绍。
接着是序列类型:list,(bytes、bytearray、memoryview(二进制序列)),range,tuple,str,array。
然后就是映射(dict)和集合,集合又包括:set和frozenset。
接着就是上下文管理类型(with),以及其他类型。其他类型包括很多,这里就不细讲,最后附上一张图,以供参考学习。
Python高级编程(2):type、object和class之间的关系
关于这部分,很多人特别是小白几乎就没弄明白过,只知道所有的类都继承我们的基类object,实际上这样说是不对的。所以今天我们就来仔细捋一捋这三者之间的关系。我们通过边用代码边说逻辑的方式进行说明。
实例化关系type两种用法:第一生成一个类,第二返回某个对象的类型。我们这里使用它的第二种用法。首先我们先来测试一下整型:
1234567891011>>> a =1>>> type(a)<class 'int'>>>> type(int)<class 'type'>>>> type(type)<class 'type'># 也就是:type-->type-->int-->1
接下来我们测试一下字符串和列表用来说明Python的其他内置类型也是具有相同的功能:
123456789101112>>> a ="envse" # 字符串>>> type(a) ...
Python高级编程(1):如何理解Python中的一切皆对象?
如何理解Python中一切皆对象这一说法呢?其实不光是Python,很多语言都号称是一切皆对象,这里就拿Java来说吧。其实Java的一切皆对象是伪装的,比如int(Java八种基本数据类型之一)在持久化的时候,就需要包装成Integer类对象。但是在python里面,一切皆对象却是真正做到了这一点,常见的字符串、数字、列表、元组、字典、函数、方法、类、模块等等都是对象,甚至包括你自定义的代码。前面的那些你可能很容易理解,但是这个函数和类也是对象可能就不是那么好理解了,下面我们就来谈谈它们两个的具体使用。
你知道的,对象一般都具有四个特点,这也是面向对象编程的一个主要体现,然后分别用代码来实现这些功能。
可以复制给一个变量;
可以添加到集合中 ;
可以作为参数传递给函数;
可以当做函数的返回值。
可以复制给一个变量1234567891011121314def ask(name="lichee"): # 函数赋值给一个变量 print(name)a = aska()class Person: # 类赋值给一个变量 def __init__(sel ...