多态是python三大特性之三 多态从字面上理解是多种形态 ——例如:狗(狼狗、藏獒、哈士奇、古牧……) 多态:一个对象可以以不同的形态去呈现 接下来看一个多态的例子: 首先定义两个类,A和B, class A: def __init__(self,name): self._name =name def run(self): print('跑喽……') @property def name(self): return self._name @name.setter def name(self,name): self._name = name class B: de Python中的多态是面向对象编程的一个重要概念,它是三大特性(封装、继承、多态)之一。多态意味着一个接口可以被不同类型的对象所使用,这些对象虽然具有不同的内部实现,但它们对外提供了相同的交互方式。这就像狗的种类很多(如狼狗、藏獒、哈士奇、古牧等),但它们都有"跑"的行为,尽管每种狗跑的方式可能不同。 下面通过一个简单的例子来展示Python中的多态。我们定义了两个类A和B: ```python class A: def __init__(self, name): self._name = name def run(self): print('跑喽……') @property def name(self): return self._name @name.setter def name(self, name): self._name = name class B: def __init__(self, name): self._name = name def run(self): print('逃喽……') @property def name(self): return self._name @name.setter def name(self, name): self._name = name ``` 这两个类都有`name`属性和`run`方法,但它们的行为略有不同。接着,我们创建了A类和B类的对象`a`和`b`: ```python a = A('孙悟空') b = B('猪八戒') ``` 然后定义了一个函数`say_hello`,它接受一个对象并打印出其`name`属性: ```python def say_hello(n): print('你好,我是', n.name) ``` 我们可以分别调用这个函数传入`a`和`b`,得到如下结果: ```python say_hello(a) # 输出:你好,我是 孙悟空 say_hello(b) # 输出:你好,我是 猪八戒 ``` 这里,`say_hello`函数并不关心传入的对象是A类还是B类,只要对象有`name`属性,它就能正常工作。这就是多态的体现,它使得代码更加通用,降低了耦合度。 Python的多态还体现在鸭子类型(Duck Typing)上。如果一个对象的行为(方法或属性)像鸭子(比如有`quack`和`walk`方法),那么它就被视为鸭子。例如,`len()`函数能对列表和字符串进行操作,是因为它们都实现了`__len__`特殊方法: ```python l = [2, 3, 4, 5] s = 'hello' print(len(l)) # 输出:4 print(len(s)) # 输出:5 ``` 我们可以在B类中实现`__len__`方法,这样B类的实例也能被`len()`函数处理: ```python class B: def __init__(self, name): self._name = name def __len__(self): return 10 def run(self): print('逃喽……') @property def name(self): return self._name @name.setter def name(self, name): self._name = name b = B('猪八戒') print(len(b)) # 输出:10 ``` 在多态中,方法和属性的定义更加灵活。只要对象满足特定条件,如具有特定的方法或属性,就可以被用来执行相应的操作,而无需关注其具体类型。这种灵活性使得代码能够更好地适应变化,提高了可扩展性。 Python中的多态允许我们编写更通用的代码,减少了对对象具体类型的依赖,增强了代码的复用性和可维护性。在实际开发中,利用多态可以设计出更符合面向对象原则的软件结构。
- 粉丝: 6
- 资源: 986
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0