1. 继承

  • 子类可以有多个直接父类。**class A(B,C,D...):**在多继承机制详解(以后找时间更新)
  • 子类继承父类除私有方法外所有的属性和方法。假如多个父类包含同名的属性或者方法,则子类优先调用排在最前面的父类的属性或者方法。
  • 子类也可以重写从父类继承过来的所有方法。
  • 子类没有重写父类的构造方法,子类初始化时会自动调用父类的构造方法。

在子类中如何调用父类的方法:

  1. class Human:
  2. def __init__(self,name,age):
  3. self.name = name
  4. self.age = age
  5. class Student(Human):
  6. def __init__(self,school,name,age):
  7. self.school = school
  8. Human.__init__(self,name ,age) # 此时是将__init__()方法视为普通方法,并不是构造方法。所以需要自己传入self。
  9. # super(Student, self).__init__(name,age)
  10. def do_homework(self):
  11. print('english homework')
  12. student1 = Student("小学",'小明',12)
  13. Student.do_homework(student1) # 多此一举,没有意义
  14. student1.do_homework()
  1. class Human:
  2. def __init__(self,name,age):
  3. self.name = name
  4. self.age = age
  5. def do_homework(self):
  6. print("It is a parent method")
  7. class Student(Human):
  8. def __init__(self,school,name,age):
  9. self.school = school
  10. super(Student, self).__init__(name,age)
  11. def do_homework(self):
  12. super(Student, self).do_homework()
  13. print('english homework')
  14. student1 = Student("小学",'小明',12)
  15. student1.do_homework()

2. 多态

在java这种强类型语言中,实例化类时,定义的类型与运行时的类型不一致就是多态。比如 **Animal a = new cat() // Cat是Animal的子类**
python中的多态与java中的多态不同:

  • 不同类含有功能不同但函数名相同的函数。
  • 只关心对象的实例方法是否同名,不关心对象所属的类型
  • 对象所属的类之间,继承关系可有可无
  • python的多态指的是调用方法的技巧,java多态注重的是类的类型不同 ```python from abc import ABCMeta,abstractmethod #(抽象方法)

class Payment(metaclass=ABCMeta): # metaclass 元类 metaclass = ABCMeta表示Payment类是一个规范类 def init(self,name,money): self.money=money self.name=name

  1. @abstractmethod # @abstractmethod表示下面一行中的pay方法是一个必须在子类中实现的方法
  2. def pay(self,*args,**kwargs):
  3. pass

class AliPay(Payment):

  1. def pay(self):
  2. # 支付宝提供了一个网络上的联系渠道
  3. print('%s通过支付宝消费了%s元'%(self.name,self.money))

class WeChatPay(Payment):

  1. def pay(self):
  2. # 微信提供了一个网络上的联系渠道
  3. print('%s通过微信消费了%s元'%(self.name,self.money))

class Order(object):

  1. def account(self,pay_obj):
  2. pay_obj.pay()

pay_obj1 = WeChatPay(“wang”,100) pay_obj2 = AliPay(“zhang”,200)

order = Order() order.account(pay_obj1) order.account(pay_obj2)

  1. ```python
  2. class Duck():
  3. def walk(self):
  4. print('I walk like a duck')
  5. def swim(self):
  6. print('i swim like a duck')
  7. class Person():
  8. def walk(self):
  9.   print('this one walk like a duck')
  10. def swim(self):
  11.   print('this man swim like a duck')
  12. class WhoSwim:
  13. def swim(self,who):
  14. who.swim()
  15. ws = WhoSwim()
  16. ws.swim(Duck())
  17. ws.swim(Person())

3. 鸭子类型/鸭子模型

鸭子模型是python编程的一种风格。在鸭子类型当中,关注点在于对象的行为能做什么,而不是关注对象所属类的类型。
其实在面试当中,面试官问到鸭子模型,就是考察python多态。