python 类
在python中,万物皆对象。基本上所有的功能都是用类进行包装。
首先要说的应该是类的成员属性和成员函数,在调用函数时,一般建议在类中进行调用。
之后是类的实例化,当写好一个类时,实例化是比较常用的调用类中属性和函数的方法。
最后是类的三大特性:封装、继承、多态。
成员属性:
class A(): name = 'noname' age = 18 def do(self): print("do some thing.")
这里的 name 和 age 就属于A类的一种属性,意思就是每一个A,都会有自己的name和age,他们可以不同,但不能没有。
do是一个包装在A类中的函数,我们建议用先实例化,在调用该函数。
实例化:
a = A() print(a.name) print(a.do())
实例化的方法:
一个对象名 = 类名(带传入的参数)
这里要说明的是,实例化的对象可以是多个,例:
b = A() print(b.age) print(b.do())
- 对于传入参数的说明:
传入哪些参数是由__init__中传入的变量来决定的。
class Teacher(): name = '' age = 18 def __init__(self): print('调用了init函数')
class Teacher(): name = '' age = 18 def __init__(self, name, age): print('调用了init函数')
同样进行实例化时,t = teacher()
第二种写法会报以下错误:
TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'
面向对象的三大特性:
继承:
继承是一个类获得另一个类的成员属性和成员方法
作用:可以减少代码的量,增强复用功能,同时可以说明两个类之间的关系。
被继承的类叫做父类(基类,超类)
继承别人类的类叫做子类(派生类)
class People(): name = '' age = 18 def __init__(self, name, age): self.name = name self.age = age def eat(self): print('eating') class teacher(): name = '' age = 18 def __init__(self, name, age): self.name = name self.age = age def eat(self): print('eating') def work(self): print('{0} is working'.format(self.name)) t = teacher('张三', 20) t.work()
我们可以每一个方法都写一次,但也可以使用继承的思想来写。
class People(): name = '' age = 18 def __init__(self, name, age): self.name = name self.age = age def eat(self): print('eating') class teacher(People): def work(self): print('{0} is working'.format(self.name)) t = teacher('张三', 20) t.work()
这两段代码有相同的作用,而第二段代码显然简单了许多。
继承不仅仅有单继承,同时还有多继承,但不建议使用多继承。
封装:
封装就是对对象成员的访问进行限制。
封装的三个级别:
public: 公开的
protected:受保护的
private: 私有的
_XXX: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,
__XXX: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
多态:
多态是不同的 子类对象调用相同的父类方法,产生不同的执行结果,可以增加代码的外部调用灵活度,
- 多态以 继承 和 重写 父类方法 为前提
- 多态是调用方法的技巧,不会影响到类的内部设计
我认为多态就是为了解决多继承的问题,而python天然的支持多继承,多态在python中就显得不那么重要了,但是多继承有多继承的缺点,
所以,我们这里提供了另一个方法,mixin模式。
Mixin设计模式
- 首先它必须表示某一种功能,而不是某个物品,如同Java中的Runnable,Callable等
- 其次它必须责任单一,如果有多个功能,那就写多个Mixin类
- 然后,它不依赖于子类的实现
- 最后,子类即便没有继承这个Mixin类,也照样可以工作,就是缺少了某个功能。