python--多态和两个练习题
多态
一种接口,多种实现
最初我们写类是这样调用的
class Animal(object): def __init__(self, name): self.name = name def talk(self): pass class Cat(Animal): def talk(self): print('Meow!') class Dog(Animal): def talk(self): print('Woof! Woof!') d = Dog("杰克") d.talk() c = Cat("叶良辰") c.talk()
结果:
Woof! Woof!
Meow!
这样也是一种多态
class Animal(object): def __init__(self, name): self.name = name def talk(self): pass class Cat(Animal): def talk(self): print('Meow!') class Dog(Animal): def talk(self): print('Woof! Woof!') def animal_talk(obj): obj.talk() d = Dog("杰克") c = Cat("叶良辰") animal_talk(c) animal_talk(d)
结果:
Meow!
Woof! Woof!
最终的多态
class Animal(object): def __init__(self, name): self.name = name def talk(self): pass @staticmethod # 静态方法 def animal_talk(obj): # 静态方法下这里不需要self obj.talk() class Cat(Animal): def talk(self): print('Meow!') class Dog(Animal): def talk(self): print('Woof! Woof!') d = Dog("杰克") c = Cat("叶良辰") Animal.animal_talk(c) # 调用了Animal下的 animal_talk方法,将c传给,animal_talk又调用了Dog下的talk(),相当于c.talk() Animal.animal_talk(d)
结果:
Meow!
Woof! Woof!
练习题
class Parent(): def func(self): print("in parent func") def __init__(self): self.func() class Son(Parent): def func(self): print("in son func") s = Son()
结果:

in son func
执行Son()先执行__init__方法,Son类中没有,然后在他的父类中找,父类中有,执行self.func(),这时候self是Son()本身,所以执行Son方法下的func方法
class Parent(): def __func(self): print("in parent func") def __init__(self): self.__func() class Son(Parent): def __func(self): print("in son func") s = Son()
结果:

in parent func
类执行的时候,遇到__xx的时候,会在前面加上_类名__xx,所以遇到self.__func()的时候,为self._Paernt__func()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2019-11-26 appium--使用PyYAML封装Capability