• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

类的“多态”

python 搞java代码 3年前 (2022-05-21) 24次浏览 已收录 0个评论

多态

1)、什么是多态

   多态指的是同一种类型的事物,不同的形态

 

2)、多态的目的

  “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字)

 

3)、多态的三种表现形式

  ① 继承父类

  ② 继承抽象类

  ③ 鸭子类型

 

 

1、继承父类

  多态的表现 “形式之一” 就是 继承父类

 

  如何实现:

    - 先抽象(即总结子类和父类的相同属性及方法),再继承

    父类:定制一套统一的规范(比如:方法名统一)

    子类:继承父类,遵循父类的统一的规范(比如:子类遵循父类方法名的统一)

 

<span style="font-family:"><span>#</span><span> 动物类</span>
<span>class</span><span> Animal:

    </span><span>def</span><span> eat(self):
        </span><span>pass</span>

    <span>def</span><span> speak(self):
        </span><span>pass</span>


<span>#</span><span> 猪类</span>
<span>class</span><span> Pig(Animal):
    </span><span>def</span><span> eat(self):
        </span><span>print</span>(<span>"</span><span>bia叽...</span><span>"</span><span>)

    </span><span>def</span><span> speak(self):
        </span><span>print</span>(<span>"</span><span>哼哼哼...</span><span>"</span><span>)

</span><span>#</span><span> 猫类</span>
<span>class</span><span> Cat(Animal):
    </span><span>def</span><span> eat(self):
        </span><span>print</span>(<span>"</span><span>咬叽...</span><span>"</span><span>)

    </span><span>def</span><span> speak(self):
        </span><span>print</span>(<span>"</span><span>喵喵喵...</span><span>"</span><span>)

</span><span>#</span><span> 狗类</span>
<span>class</span><span> Dog(Animal):
    </span><span>def</span><span> eat(self):
        </span><span>print</span>(<span>"</span><span>舔叽...</span><span>"</span><span>)

    </span><span>def</span><span> speak(self):
        </span><span>print</span>(<span>"</span><span>汪汪汪...</span><span>"</span><span>)


animal1 </span>=<span> Pig()
animal2 </span>=<span> Cat()
animal3 </span>=<span> Dog()

animal1.speak()
animal2.speak()
animal3.speak()</span></span>

www#gaodaima.com来源gaodai#ma#com搞*!代#%^码$网搞代码

  执行结果:

<span>哼哼哼...
喵喵喵...
汪汪汪...</span>

注意:在python中不会强制限制 子类 必须要遵循 父类 的规范,所以出现了 继承抽象类

 

 

2、继承抽象类

1)什么是抽象类

  在python内置的abc模块中,有一个抽象类,使用此类,使子类必须遵循父类的编码规范(不遵循,调用即报错)

 

2)抽象类的作用

  让子类必须遵循父类的编码规范

 

3)如何实现抽象类

 

  父类需要继承abc模块中:metaclass=abc.ABCMeta

  在父类的需要遵循编码规范的方法上装饰上abc.abstractmethod

 

注意:子类必须要按照父类的方法编写规范,缺一不可。(只要父类中有几个抽象方法,子类就要有几个抽象方法)

 

  例:写一个抽象类

<span style="font-family:"><span>import</span><span> abc

</span><span>#</span><span> 父类需要继承abc模块中:metaclass=abc.ABCMeta</span>
<span>class</span> Animal(<span>metaclass=</span><span><span>abc.ABCMeta</span>):
    </span><span>#</span><span> 在父类的需要遵循编码规范的方法上装饰上abc.abstractmethod</span>
<span>    @abc.abstractmethod
    </span><span>def</span><span> eat(self):
        </span><span>pass</span>
    <span>#</span><span> 在父类的需要遵循编码规范的方法上装饰上abc.abstractmethod</span>
<span>    @abc.abstractmethod
    </span><span>def</span><span> speak(self):
        </span><span>pass</span>

<span>#</span><span> 猪类</span>
<span>class</span><span> Pig(Animal):
    </span><span>#</span><span> 根据父类编码规范必须要有eat方法(方法名不能变)</span>
    <span>def</span><span> eat(self):
        </span><span>print</span>(<span>"</span><span>bia叽...</span><span>"</span><span>)
    </span><span>#</span><span> 根据父类编码规范必须要有speak方法(方法名不能变)</span>
    <span>def</span><span> speak(self):
        </span><span>print</span>(<span>"</span><span>哼哼哼...</span><span>"</span><span>)
    </span><span>#</span><span> 此方法无要求,可有可无</span>
    <span>def</span><span> run(self):
        </span><span>print</span>(<span>"</span><span>pig is running...</span><span>"</span>)</span><br><br><span style="font-family:">pig_obj = Pig()</span>

 

 

3、鸭子类型

1)什么是鸭子类型

  不同的对象,只要长得像鸭子,动物行为像鸭子,那就是鸭子!

  “鸭子类型” 是多态的表现形式之一

 

  PS:多态(继承父类、继承抽象类、鸭子类型)其实就是代码的规范形式,即编码规范

 

2)如何实现鸭子类型

  不同对象,先抽象出相同类型的方法,给他们定制一套统一的规范

  所有的类,在定义时都按照统一的规范进行编写

 

注意:在python中,强烈推荐鸭子类型

 

<span style="font-family:"><span>#</span><span> 动物类:定义代码规范</span>
<span>class</span><span> Animal:
    </span><span>def</span><span> eat(self):
        </span><span>pass</span>

    <span>def</span><span> speak(self):
        </span><span>pass</span>

<span>#</span><span> 猪类:按照动物类的代码规范来编写</span>
<span>class</span><span> Pig:
    </span><span>def</span><span> eat(self):
        </span><span>print</span>(<span>"</span><span>bia叽...</span><span>"</span><span>)

    </span><span>def</span><span> speak(self):
        </span><span>print</span>(<span>"</span><span>哼哼哼...</span><span>"</span><span>)

</span><span>#</span><span> 猫类:按照动物类的代码规范来编写</span>
<span>class</span><span> Cat:
    </span><span>def</span><span> eat(self):
        </span><span>print</span>(<span>"</span><span>咬叽...</span><span>"</span><span>)

    </span><span>def</span><span> speak(self):
        </span><span>print</span>(<span>"</span><span>喵喵喵...</span><span>"</span><span>)

</span><span>#</span><span> 狗类:按照动物类的代码规范来编写</span>
<span>class</span><span> Dog:
    </span><span>def</span><span> eat(self):
        </span><span>print</span>(<span>"</span><span>舔叽...</span><span>"</span><span>)

    </span><span>def</span><span> speak(self):
        </span><span>print</span>(<span>"</span><span>汪汪汪...</span><span>"</span>)</span>

 

 

4、多态总结

  多态的三种表现形式:

    继承父类:

      耦合度高,程序的可扩展性低

    继承抽象类:(强烈不推荐使用)

      耦合度极高,程序的扩展性极低

    鸭子类型:(强烈推荐使用)

      耦合度低,程序的可扩展性高


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:类的“多态”

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址