1.如何创建类
2.如何创建方法
- 构造方法:
- __init__
- obj = 类名('a1')
- 普通方法:
- obj = 类名('xxx')
- obj.普通方法名()
3.图解面向对象的创建和执行

4.面向对象三大特性之一:封装
- '''定义'''
- class Bar:
- def __init__(self,name,age):
- self.n = name
- self.a = age
- '''执行'''
- b1 = Bar('admin',26)
- b2 = Bar('qq',48)
4.1 普通方法与构造方法对比:

5.面向对象三大特性之二:继承
- #*****创建父系类******
- class Beast: #动物的功能
- def eat(self):
- print(' %s吃'%(self.name))
- def drink(self):
- print(' %s喝'%(self.name))
- def shit(self):
- print(' %s拉'%(self.name))
- def pee(self):
- print(' %s撒' % (self.name))
- #********创建猫的 类******
- class Cat(Beast): #猫继承动物的功能
- def __init__(self,name):
- self.name = name
- self.breed = '猫'
- def fig(self):
- print('%s\n'%(self.name),'喵喵叫')
- #******* 创建狗的 类********
- class Dog(Beast): #狗继承动物的功能
- def __init__(self,name):
- self.name = name
- self.breed = '狗'
- def fig(self):
- print('%s\n'%(self.name),'汪汪叫')
- '''执行'''
-
- '''猫的部分功能执行'''
- a = Cat('猫')
- a.fig()
- a.eat()
- '''狗的部分功能执行'''
- b = Dog('狗')
- b.fig()
- b.drink()
6.面向对象三大特性三:多态继承
6.1 多态继承案列一:
- 1 class F_0:
- 2 def a(self):
- 3 print('F_0.a')
- 4 class F0(F_0):
- 5 def a1(self):
- 6 print('F0.a')
- 7
- 8 class F1(F0):
- 9 def a1(self):
- 10 print('F1.a')
- 11
- 12 class F2():
- 13 def a(self):
- 14 print('F2.a')
- 15
- 16 class S(F1,F2):
- 17 pass
- 18
- 19 #*****执行*****
- 20
- 21 obj = S()
- 22 obj.a() # F_0.a
过程:对象obj 现在F1中找a(),F1中没有,在F1的父系(F0)中找,如果F0中没有,再去F0的父系(F_0)中找,如果有,就打印,不在去F2中找,如果没有,就去F2中找。执行过程:左侧优先,一条道走到黑。具体如图展示:

6.2 多态继承案列二:(两个类有交集的类)
- 1 class Base:
- 2 def a2(self):
- 3 print('Base.a')
- 4 class F0(Base):
- 5 def a1(self):
- 6 print('F0.a')
- 7
- 8 class F1(F0):
- 9 def a1(self):
- 10 print('F1.a')
- 11
- 12 class F2(Base):
- 13 def a(self):
- 14 print('F2.a')
- 15
- 16 class S(F1,F2):
- 17 pass
- 18
- 19 obj = S()
- 20 obj.a() # F2.a
- 21 obj.a2() #Base.a
Base 类是类F1和F2的交集。过程:对象obj 现在F1中找a(),F1中没有,在F1的父系(F0)中找,如果F0中没有;开始从F2中找,F2中没有就去F2的父系(Base)中找。
结论:Base 如果是两个类的交集,那么执行过程是先执行左边的,再执行右边的,从右边执行过程中打印。如图所示:

6.3 多态继承案列三:
- 1 class BaseReuquest():
- 2 pass
- 3
- 4 class RequestHandler(BaseReuquest):
- 5 def serve_forever(self):
- 6 #self 是obj
- 7 print('RequestHandler.serve_forever')
- 8 self.process_request()
- 9 def process_request(self):
- 10 print('RequestHandler.process_request')
- 11
- 12 class Minx:
- 13 def process_request(self):
- 14 print('Minx.process_request')
- 15
- 16
- 17 class Son(Minx,RequestHandler):
- 18 pass
- 19
- 20 obj = Son()
- 21 obj.serve_forever()
过程: 创建4个类,执行obj.serve_forever()语句,根据左侧优先,先执行 类 Minx ,没有就执行右侧的 类 RequestHandler ,在类 RequestHandler 中找server_forever()方法执行,这时候会打印 print('RequestHandler.serve_forever');由于方法里面有self.process_request(),故而会执行 类 Minx 中 process_request() 的方法。原因是 self 是对象 obj ,所以:self.process_request() 也就是obj.process_request(),根据左侧优先,所以会现在 类Minx 中找process_request() 方法。如图所示:
