Python支持多种编程方式:面向过程,面向对象,面向切面(装饰器部分)等
OOP思想
- 面向对象的基本哲学:世界是由具有各自运动规律和内部状态的对象组成,对象之间的相互作用和通讯构成了世界
- 唯一性:世界上没有两片相同的树叶,同样的没有两个相同的对象
- 分类性:分类是对现实世界的抽象
面向对象特性
三大特性:封装,继承和多态
1. 封装
1.1.类的公有属性
类外面都可以访问的属性叫公有属性 X
属于这个类的对象都可以访问的属性叫公有属性 V
1.2 更改类的公有属性
I. 通过对象改(在自己的内存中创建了一个新的变量)
r1.nationality = CN
II. 通过类改
Role.nationality = JP
对象访问公有属性:对象的内存地址—>类地址(先在自己的内存地址查找,如果不存在就在类地址中查找) 类似与类方法继承
- 类中封装了:字段,方法
- 对象中封装了:普通字段的值
class F1(object):
def __init__(self,n):
self.N = n
print('F1')
class F2(object):
def __init__(self,arg1):
self.a =arg1
print('F2')
class F3(object):
def __init__(self,arg2):
self.b = arg2
print('F3')
o1 = F1('Alex')
o2 = F2(o1)
o3 = F3(o2)
如何通过o3得到Alex: o3.b.a.N
封装不仅可以封装字符串,数字,还有对象等
2. 继承
继承的过程就是从一般到特殊的过程
class F1(object):
def __init__(self):
print("F1")
def a1(self):
print('F1a1')
def a2(self):
print('F1a2')
class F2(F1):
def __init__(self):
print('F2')
def a1(self): #--3--
self.a2() #--4--
print('F2a1') #--7--
def a2(self):
print('F2a2')
class F3(F2):
def __init__(self):
print('F3')
def a2(self): #--5--
print('F3a2') #--6--
obj = F3() # --1--
obj.a1() #--2--
F3
F3a2
F2a1
经典类与新式类
SchoolMember.__init__(self,name,age,sex) #经典类写法
super(Teacher,self).__init__(name,age,sex) #新式类写法
Python2 经典类深度查询,新式类广度查询
Python3 经典类和新式类都为广度查询
多重继承
class A(object):
def __init__(self, a):
print('init A...') #--5--
self.a = a #--6--
class B(A):
def __init__(self, a):
super(B, self).__init__(a) #--3--
print('init B...') #--8--
class C(A):
def __init__(self, a):
super(C, self).__init__(a) #--4--
print('init C...') #--7--
class D(B, C):
def __init__(self, a):
super(D, self).__init__(a) #--2--
print('init D...') #--9--
d = D("d") #--1--
init A...
init C...
init B...
init D...
参考文档:http://www.cnblogs.com/superxuezhazha/p/5737967.html
3. 多态
python的多态用一句话概括就是,有这种方法,并且传入相应的参数就行
参考文档: http://www.cnblogs.com/superxuezhazha/p/5737955.html