# 自律 学习日记04-3
一.伪多态
1.面对对象三大特征
问题一:面向对象三大特征:封装,继承,多态
封装:将数据和方法放在一个类中就构成了封装。
继承:python中一个类可以继承于一个类也可以继承多个类,被继承的类叫父类(或者叫基类,base class)
多态:指的是一类事物有多种形态,一个抽象类有多个子类(因而多态的概念依赖于继承),不同的子类对象调用相同的方法,产生不同的执行结果,多态可以增加代码的灵活度是
问题二:
伪多态的实现方法:1.必须有继承,2.子类必须有重写
class Baes(object):
def run(self):
print('____base___run___:慢慢走路')
class Cat(Baes):
def run(self):
print('____base___run___:Cat的走路方法')
class Dog(Baes):
def run(self):
print('____base___run___:Dog的走路方法')
class Pig(Baes):
pass
b_obj=Baes()
c_obj=Cat()
d_obj=Dog()
p_obj=Pig()
#定义函数,分别传入不同的类对象进去,根据不同的对象做不同的类型,这就是多态
def func(obj):
obj.run()
func(b_obj)
func(c_obj)
func(d_obj)
func(p_obj)
>>>
____base___run___:慢慢走路
____base___run___:Cat的走路方法
____base___run___:Dog的走路方法
____base___run___:慢慢走路
装饰函数不需要return,装饰类要+return
class Baes(object):
def run(self):
print('____base___run___:慢慢走路')
class Dog(Baes):
def run(self):
return '____base___run___:Dog的走路方法'
b_obj=Baes()
d_obj=Dog()
print(d_obj.run())
____base___run___:Dog的走路方法
#不用return,用print的话会返回none
二.鸭子类型
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。
class Duck:
def quack(self):
print ("Quaaaaaack!")
class Bird:
def quack(self):
print( "bird imitate duck.")
class Doge:
def quack(self):
print ("doge imitate duck.")
def in_the_forest(duck):
duck.quack()
duck = Duck()
bird = Bird()
doge = Doge()
for x in [duck, bird, doge]:
in_the_forest(x)
三.类的调用
1.类的内部调用:self.<方法名>(参数列表)。
2.在类的外部调用:<实例名>.<方法名>(参数列表)。
class Baes(object):
def run(self):
print('____base___run___:慢慢走路')
Baes().run()
>>>>>
____base___run___:慢慢走路
两种写法:
class Baes(object):
def run(self):
print('____base___run___:慢慢走路')
a=Baes()
def fun(a):
a.run()
fun(a)
>>>>>
____base___run___:慢慢走路