首页 » 网站建设 » php继续封装多态重写技巧_python之多态持续重写篇

php继续封装多态重写技巧_python之多态持续重写篇

访客 2024-10-26 0

扫一扫用手机浏览

文章目录 [+]
小编

# -- coding: UTF-8 --class Animal: def run(self): print("动物会跑。

") def sleep(self): print('动物会睡觉')class Dog: def run(self): print("狗会跑。

") def sleep(self): print('狗会睡觉') def bark(self): print('狗会叫')#如果在子类中如果有和父类同名的方法,则通过子类实例去调用方法时,会调用子类的方法而不是父类的方法,这个特地我们称为重写(覆盖)d = Dog()d.run()#当我们调用一个工具的方法时,会优先去当前工具中探求是否具有该方法,如果有则直接调用,#如果没有,则去当前的父类中探求,如果父类中有则直接调用父类中的方法#如果没有,则去父类中探求,以此类推,直到找到object,如果依然没有找到,则报错。
class A(object): def test(self): print('AAA')class B(A): def test(self): print('BBB')class C(B): def test(self): print('CCC')c = C()c.test()

# -- coding: UTF-8 --#多态面向工具的三大特色之一#多态从字面上理解是多种形态#狗(狼狗,哈士奇。

php继续封装多态重写技巧_python之多态持续重写篇



)#一个工具可以以不同的形态去呈现#定义两个类class A: def __init__(self, name): self.__name = name @property def name(self): return self.__name @name.setter def name(self, name): self.__name = nameclass B: def __init__(self, name): self.__name = name def __len__(self): pass @property def name(self): return self.__name @name.setter def name(self, name): self.__name = nameclass C(): passa = A('孙悟空')b = B('猪八戒')c = C()#定义一个函数#对付say_hello()这个函数来说,只要工具中含有name属性,他就可以作为参数通报。
#这个函数并不会考虑工具的类型,只要name属性就可以了def say_hello(obj): print('你好 %s' % obj.name)#在say_hello_2中我们做了一个类型检讨,也便是只有obj是A类型的工具时,才可以正常利用,#其他类型的工具都无法利用该函数,这个函数就违反了多态#违反了多态的函数,只适用于一种类的工具,无法处理其他类的工具,这样导致函数的适应性非常差。
#def say_hello_2(obj): if isinstance(obj, A): print('你好 %s' % obj.name)say_hello(b)say_hello_2(b)#鸭子类型#如果一个东西走路像鸭,叫声像鸭,那么他便是鸭子。
#len()#之以是一个工具能用len()来获取长度,是由于工具中具有一个分外的方法__len__l = [1, 2, 3]s = 'hello'print(len(l))print(len(s))#面向工具的三大特色#封装:确保工具的数据安全性#继续:确保了工具的可扩展性#多态:确保程序的灵巧性。

# -- coding: UTF-8 --class A(object): def test(self): print('AAA')class B(A): def test(self): print('BBB')#在python中支持多重继续,也便是我们可以为一个类同时指定多个父类#可以在类名的()后边添加多个类,来实现多重继续#多重继续,会使子类同时拥有多个父类,并且会获取到所有父类中的方法#在开拓中如果没有分外情形,只管即便避免利用多重继续,多重继续会使我们代码更加繁芜#如果多个父类中有同名的方法,会先从第一个父类中查找,然后再找第二个,第三个。

,前边父类方法会覆盖后面的父类方法class C(A, B): pass#类名.__bases__这个属性用来获取当前类的所有父类print(C.__bases__) #(<class '__main__.B'>,)print(B.__bases__) #(<class '__main__.A'>,)print(C.__bases__)

# -- coding: UTF-8 --class Animal: def __init__(self, name): self._name = name def run(self): print("动物会跑。

") def sleep(self): print('动物会睡觉') @property def name(self): return self._name @name.setter def name(self, name): self._name = name#父类中的所有方法都会被子类继续,包括分外方法,也可以重写分外方法class Dog: def __init__(self, name, age): #希望可以直接调用父类的__init__来初始化父类中定义的属性 #super()可以用来获取当前类的父类 #并且通过super()返回工具调用父类方法时,不须要通报self super().__init__(name) self._age = age def run(self): print("狗会跑。

") def sleep(self): print('狗会睡觉') def bark(self): print('狗会叫') @property def name(self): return self._name @name.setter def name(self, name): self._name = name @property def age(self): return self._age @age.setter def age(self, age): self._age = age

php继续封装多态重写技巧_python之多态持续重写篇
(图片来自网络侵删)
标签:

相关文章

CSGO仓库地图变迁从经典布局到创新设计

《反恐精英:全球攻势》(CSGO)作为一款全球知名的第一人称射击游戏,其地图作为游戏的基础元素之一,承载着丰富的战术策略和玩家情感...

网站建设 2025-04-14 阅读1 评论0

EHR自助平台医疗信息化新时代的利器

医疗行业也迎来了数字化、智能化的新时代。电子健康记录(EHR)自助平台作为医疗信息化的重要工具,极大地提高了医疗服务的质量和效率。...

网站建设 2025-04-14 阅读1 评论0

CS仓库地图CS1.6游戏世界的奥秘

CS1.6作为一款经典的射击游戏,自2003年发布以来,凭借其独特的游戏体验和丰富的地图资源,吸引了无数玩家。其中,CS仓库地图(...

网站建设 2025-04-14 阅读1 评论0

gduck小黄鸭究竟是不是正品

gduck小黄鸭,作为一款深受消费者喜爱的家居用品,近年来备受关注。在市场上,关于gduck小黄鸭正品的争议也从未停歇。gduck...

网站建设 2025-04-14 阅读1 评论0