您的位置:首页 > 新闻 > 资讯 > Python__面向对象__多态学习

Python__面向对象__多态学习

2024/12/29 6:36:38 来源:https://blog.csdn.net/le_u_6/article/details/141712103  浏览:    关键词:Python__面向对象__多态学习

目录

一、多态

1.多态定义理解

2.实例属性和类属性

3.类相关的函数

(1) 实例方法

(2)类方法

(3)静态方法 

 

一、多态

1.多态定义理解

在Python中,多态是一种特性,类似于一个接口,允许在一个对象中的一个操作可作用在不同类型的对象上,执行的不同的任务。

示例:

# 定义一个文具的类
class Stationery(object):# 定义一个study的方法(函数)def study(self):print("一些学习用品")# 定义一个Rule类,继承自 Stationery 类
class Rule(Stationery):def study(self):  # 重写父类的study方法print("学习三角板的用法")# 定义一个Compass类,继承自 Stationery 类
class Compass(Stationery):def study(self):  print("学习圆规的用法")# 定义一个 draw 函数,然后接受Stationery类的一个实例
def draw(line):line.study()rule = Rule()  # 创建 Rule 类的一个实例
draw(rule)  # 调用 draw 函数并传入 rule,并调用 Rule 类的 study 方法
compass = Compass()
draw(compass)

以上段代码中,draw 函数接受一个参数 line,这个参数可以是 Stationery类或其任何子类的实例。draw函数中的 line.study() 调用将根据传入对象的实际类型来执行相应的study方法。这就是多态的表现。

2.实例属性和类属性

可参考这篇中“类的定义”理解 

https://blog.csdn.net/le_u_6/article/details/139290390?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/le_u_6/article/details/139290390?spm=1001.2014.3001.5502

3.类相关的函数

在Python中,根据使用需求的所不同,可将类相关的方法(函数)分为:实例方法、类方法和静态方法。

(1) 实例方法

实例方法是与类实例(对象)相关联的方法。它们通常用于操作或访问类的实例属性。实例方法使用def关键定义,并且其第一个参数通常是self,代表当前的实例对象。
示例:

class Clothes: # 定义初始化的四个实例属性 :size, brand, cost,pricedef __init__(self, size, brand, price):  self.size = size  # 实例属性赋值self.brand = brand  # 实例属性赋值self.cost = 50  # 成本价初始化为50self.price = price # 以下定义三个实例方法:on_season,off_season,current_pricedef on_season(self, rise):  self.price = self.cost + rise  # 计算旺季时的价格def off_season(self, fall):  self.price = self.cost + fall  # 计算淡季时的价格def current_price(self):   print("当前价格:", self.price, "CNY")  # 计算当前总价格return self.price   # 创建Clothes类的一个c1实例
c1 = Clothes("XL码", "NIKE", None)# 给c1实例动态添加rise属性,并赋值为200
c1.rise = 200# 调用on_season方法,并传入c1.rise作为涨价额度
c1.on_season(c1.rise)   # 调用current_price方法,输出当前价格
c1.current_price()   # 创建Clothes类的一个c2实例
c2 = Clothes("XL码", "ANTA",None)c2.fall = 5# 调用off_season方法,并传入c2.fall作为降价额度
c2.off_season(c2.fall)c2.current_price()   # 快买!

在三个实例方法内部中,使用self关键字引用当前实例对象的属性,通过对属性的操作实现对价格的调整。

(2)类方法

类方法是与类本身相关联的方法,而不是类的实例。它们通常用于操作类属性或需要与类相关的功能。类方法使用@classmethod装饰器定义,并且其第一个参数通常是 cls,代表类本身。

例:

class Clothes:# 定义一个类属性,用于记录衣物的总件数total_clothes = 0# 定义两个实例属性,用于记录衣物的尺寸和品牌def __init__(self, size, brand):self.size = sizeself.brand = brand# 每次创建衣物实例时,总数增加1Clothes.total_clothes += 1# 类方法,用于获取衣物的总数@classmethoddef get_total_clothes(cls):# 返回衣物的总数return cls.total_clothes# 创建两个衣物实例
c1 = Clothes("XXL码", "NIKE")
c2 = Clothes("XL码", "ANTA")# 当前的衣物总数
print(Clothes.get_total_clothes(), "件")

(3)静态方法

静态方法是与类相关联的方法,但它们不接收类或实例的引用作为参数。它们通常用于工具函数或与类和实例无关的逻辑。静态方法使用@staticmethod装饰器定义,它们可以看作是类内部的普通函数。

例:

class Clothes:# 定义4个初始化的实例属性def __init__(self, size, brand, item, number):self.size = sizeself.brand = brandself.item = item  # 单价self.number = number  # 数量@staticmethod  # 静态方法def get_total_price(item, number):# 计算总价return item * number# 创建一个衣物实例
c = Clothes("XL码", "ANTA", 45, 100)# 调用静态方法 get_total_price ,并传入单价和数量
total_price = Clothes.get_total_price(c.item, c.number)# 最后计算出的总金额
print("总额:", total_price, "CNY")

综上所述,装饰器是区分这三种方法的一个显著标志:

实例方法没有特殊的装饰器,通常以 self 作为第一个参数。

类方法使用 @classmethod 装饰器,通常以 cls 作为第一个参数。

静态方法使用 @staticmethod 装饰器,因为没有self参数,所以它无法访问类的实例属性。也由于没有cls参数,所以它也无法访问类属性。因此,静态方法没有啥必须的参数...

实际使用中,选择哪种方法取决于个人的需求:

如果需要操作实例属性或需要实例上下文,使用实例方法。

如果需要访问类属性或执行与类相关的操作,使用类方法好。

如果需要一个与类和实例都无关的工具函数,可使用静态方法。

P.S.

胖中秋,盼国庆......(`へ´*)ノ

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com