导航:首页 > 编程语言 > python实现多态

python实现多态

发布时间:2025-05-07 04:07:26

‘壹’ python中的面向对象(高级)之私有方法、多继承、多态

特征:私有属性与私有方法不能从外部被调用,也不能被子类继承

唯一写法:在属性或方法前面加上__(两个下划线)

我们写一个简单的例子,创建一个类,包含私有方法、私有属性、普通方法、普通属性,并生成一个实例

私有属性和私有方法可以从内部被调用(总不能我写了,但是哪都不让用吧)

我们试试在类里再加入一个新的方法,调用私有方法和属性

可以看到,私有属性和私有方法是可以在类内部被调用的。

举个私有属性应用场景的例子


二。object类

我们试一下


三。多继承

一个子类可以继承多个父类,用逗号隔开

多个父类中有同名方法时,按照继承顺序进行调用


四。多态

当不同的实例,有同名的方法时,我们可以一个函数,传入不同的实例,执行对应的方法。

我们定义一个猫和一个狗的类,两个类中都有'叫'的方法。并各生成一个实例。

定义一个函数,用函数来调用'叫'的方法

这就叫多态。

‘贰’ python中的继承和多态

继承:在已有类的基础上创建新类,这其中的一种做法就是让一个类从另一个类那里将属性和方法直接继承下来,从而减少重复代码的编写。
1.提供继承信息的我们称之为父类,也叫超类或基类;2.得到继承信息的我们称之为子类,也叫派生类或衍生类。3.子类除了继承父类提供的属性和方法,还可以定义自己特有的属性和方法,所以子类比父类拥有的更多的能力
多态:子类在继承了父类的方法后,通过方法重写我们可以让父类的同一个行为在子类中拥有不同的实现版本,这个就是多态。

‘叁’ Python类的继承和多态代码详解

Python类的继承和多态代码详解
Python类的继承
在OOP(ObjectOrientedProgramming)程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Baseclass、Superclass)。
我们先来定义一个classPerson,表示人,定义属性变量name及sex(姓名和性别);
定义一个方法print_title():当sex是male时,printman;当sex是female时,printwoman。参考如下代码:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex

def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")

class Child(Person): # Child 继承 Person
pass

May = Child("May","female")
Peter = Person("Peter","male")

print(May.name,May.sex,Peter.name,Peter.sex) # 子类继承父类方法及属性
May.print_title()
Peter.print_title()

而我们编写Child类,完全可以继承Person类(Child就是Person);使用classsubclass_name(baseclass_name)来表示继承;

继承有什么好处?最大的好处是子类获得了父类的全部属性及功能。如下Child类就可以直接使用父类的print_title()方法

实例化Child的时候,子类继承了父类的构造函数,就需要提供父类Person要求的两个属性变量name及sex:

在继承关系中,如果一个实例的数据类型是某个子类,那它也可以被看做是父类(May既是Child又是Person)。但是,反过来就不行(Peter仅是Person,而不是Child)。

继承还可以一级一级地继承下来,就好比从爷爷到爸爸、再到儿子这样的关系。而任何类,最终都可以追溯到根类object,这些继承关系看上去就像一颗倒着的树。比如如下的继承树:

isinstance()及issubclass()

Python与其他语言不同点在于,当我们定义一个class的时候,我们实际上就定义了一种数据类型。我们定义的数据类型和Python自带的数据类型,比如str、list、dict没什么两样。

Python有两个判断继承的函数:isinstance()用于检查实例类型;issubclass()用于检查类继承。参见下方示例:
class Person(object):
pass

class Child(Person): # Child 继承 Person
pass

May = Child()
Peter = Person()

print(isinstance(May,Child)) # True
print(isinstance(May,Person)) # True
print(isinstance(Peter,Child)) # False
print(isinstance(Peter,Person)) # True
print(issubclass(Child,Person)) # True

Python类的多态

在说明多态是什么之前,我们在Child类中重写print_title()方法:若为male,printboy;若为female,printgirl
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex

def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")

class Child(Person): # Child 继承 Person
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")

May = Child("May","female")
Peter = Person("Peter","male")

print(May.name,May.sex,Peter.name,Peter.sex)
May.print_title()
Peter.print_title()
当子类和父类都存在相同的print_title()方法时,子类的print_title()覆盖了父类的print_title(),在代码运行时,会调用子类的print_title()
这样,我们就获得了继承的另一个好处:多态。
多态的好处就是,当我们需要传入更多的子类,例如新增Teenagers、Grownups等时,我们只需要继承Person类型就可以了,而print_title()方法既可以直不重写(即使用Person的),也可以重写一个特有的。这就是多态的意思。调用方只管调用,不管细节,而当我们新增一种Person的子类时,只要确保新方法编写正确,而不用管原来的代码。这就是着名的“开闭”原则:
对扩展开放(Openforextension):允许子类重写方法函数
对修改封闭(Closedformodification):不重写,直接继承父类方法函数
子类重写构造函数
子类可以没有构造函数,表示同父类构造一致;子类也可重写构造函数;现在,我们需要在子类Child中新增两个属性变量:mother和father,我们可以构造如下(建议子类调用父类的构造方法,参见后续代码):
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex

class Child(Person): # Child 继承 Person
def __init__(self,name,sex,mother,father):
self.name = name
self.sex = sex
self.mother = mother
self.father = father

May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)

Person
若父类构造函数包含很多属性,子类仅需新增1、2个,会有不少冗余的代码,这边,子类可对父类的构造方法进行调用,参考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex

class Child(Person): # Child 继承 Person
def __init__(self,name,sex,mother,father):
Person.__init__(self,name,sex) # 子类对父类的构造方法的调用
self.mother = mother
self.father = father

May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)

多重继承

多重继承的概念应该比较好理解,比如现在需要新建一个类baby继承Child,可继承父类及父类上层类的属性及方法,优先使用层类近的方法,代码参考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex

def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")

class Child(Person):
pass

class Baby(Child):
pass

May = Baby("May","female") # 继承上上层父类的属性
print(May.name,May.sex)
May.print_title() # 可使用上上层父类的方法

class Child(Person):
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")

class Baby(Child):
pass

May = Baby("May","female")
May.print_title() # 优先使用上层类的方法
总结
以上就是本文关于Python类的继承和多态代码详解的全部内容,希望对大家有所帮助。

‘肆’ Python中的多态

times函数为例谈谈多态,就像我们看到的那样,times函数中表达式×*y的意义完全取决于x和y的对象类型,同样的函数,在一个实例下执行的是乘法,在另一个实例下执行的却是重复。Python把对某一对象在某种语法下的合理性交给那个对象自身来判断。实际上,*作为一个分派机制,将执行的控制权移交给被处理的对象。
这种依赖类型的行为称为多态,其含义就是一个操作的意义取决于被操作对象的类型。因为Python是动态类型语言,所以多态在Python中随处可见。事实上,在 Python中所有操作都是多态的操作:print、index、*运算符,以及更多。这实际上是有意而为的,并且从很大程度上算作是这门语言简洁性和灵活性的一个表现。例如,函数可以自动地应用到所有类别的对象上。只要对象支持所预期的接口(也称为协议),函数就能处理它们。也就是说,如果传给函数的对象支持预期的方法和表达式运算符,那么它们对函数的逻辑来说就是有着即插即用的兼容性。
即使是简单的times 函数,对任意两个支持*的对象都可以执行,无论它是哪种类型,也不管它是何时编写的。这个函数对于数字来说是有效的(执行乘法),或者一个字符串和一个数字(执行重复),或者任意其他支持扩展接口的兼容对象——甚至是我们尚未编写过的基于类的对象。

‘伍’ python中到底“多态”是什么!!!

Python是一种纯粹的面向对象语言。面向对象编程中的四大特征分别是:抽象、封装、继承和多态。多态根据上下文,对象可以采用多种形式。程序将确定该对象每次执行所需的含义或用法,从而减少了重复代码。

我国有句俗语:“龙生九子,各有不同”。这就是多态。多态是同一类事物具有的多种形态。多态是面向对象编程的重要特点之一。

Python本身就是一种多态语言:

上述程序中,调用Func()函数为同一个操作,但调用的参数是不同的,即调用了不同的实例作为参数。由运行结果可知,有不同的类创建不同的实例,以不同的实例作为参数时,调用talk()得到的打印结果是不同的,这是因为每个实例具有不同的实现方式,这就是多态性的体现。

多态性是同一个操作因作用实例不同而表现出不同实现方式的特性。多态性增加了程序的灵活性,以不变应万变,无论实例千变万化,使用者都是以同一种形式去调用;多态性还增加了程序可扩展性,通过继承创建新的类,子类可以使用父类的方法,也可以使用自己重写的方法。

关于深度学习的基础问题可以看下这个网页的视频教程,网页链接,希望我的回答能帮到你。

‘陆’ python面向对象什么是封装、继承、多态

Python面向对象编程中的封装、继承和多态分别是指

  1. 封装

    • 定义:封装是指将数据和相关操作封装在一起,形成一个类。这样做的目的是保护数据的完整性和安全性,同时提供一个清晰的接口供外部访问。
    • 作用:通过封装,可以隐藏类的内部实现细节,只暴露必要的接口给外部使用。这有助于减少外部对内部数据的直接操作,从而降低出错的可能性。
  2. 继承

    • 定义:继承是面向对象编程中的一种机制,允许子类继承父类的属性和方法。子类可以重用父类的代码,并在此基础上进行扩展或修改。
    • 作用:继承提高了代码的复用性,使得开发者可以避免重复编写相同的代码。同时,通过继承,子类可以轻松地扩展或修改父类的功能,从而实现更灵活的设计。
  3. 多态

    • 定义:多态是指不同的对象可以响应相同的消息,但具体的行为可能不同。这允许使用统一的接口来处理不同类型的对象。
    • 作用:多态增强了代码的灵活性和可扩展性。通过多态,开发者可以编写更加通用的代码,这些代码可以在运行时根据对象的实际类型来执行不同的操作。这有助于降低代码的耦合度,提高系统的可维护性和可扩展性。
阅读全文

与python实现多态相关的资料

热点内容
排序算法c和a 浏览:416
手机拍照上传android 浏览:341
linux压缩率 浏览:614
电脑浏览器加密端口 浏览:536
单片机线性电源 浏览:268
韩国云服务器评测 浏览:740
python输出hello 浏览:593
如何在最左侧添加文件夹 浏览:500
python实现https请求 浏览:471
一端无支座端梁要加密吗 浏览:247
云服务器能做什么兼职 浏览:972
大疆程序员姜 浏览:415
饥荒如何挂服务器 浏览:244
GM附魔命令 浏览:601
反编译自己制作的软件 浏览:37
ros用c还是python好 浏览:81
安卓九系统提醒怎么关 浏览:658
我的世界服务器有领地怎么抄家 浏览:38
python实现多态 浏览:304
幼师pdf 浏览:941