Python面向对象的编程思想(二):类的方法重写、property、运算符重载

1.super关键词的详细讲解使用

super() 函数是用于调用父类(超类)的一个方法。

super() 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

# 定义父类
class father():
    def func1(self):
        print("这是父类啊")

# 定义子类继承父类
class son(father):
    def func2(self):
        # super关键词继承父类的方法
        super().func1()
        print("这是子类")

# 实例化一个子类对象
son1=son()
son1.func2()

运行结果:

 2.方法重写

class Parent:        # 定义父类
   def myMethod(self):
      print ('调用父类方法')
 
class Child(Parent): # 定义子类
   def myMethod(self):
      print ('调用子类方法')
 
c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法

3.例题

(1)动态给类添加方法,具体是对猫的类中没有设置奔跑的方法,在类外添加这个方法,并是打印显示

from types import MethodType

# 动态给类添加方法,具体是对猫的类中没有设置奔跑的方法,在类外添加这个方法,并是打印显示
from types import MethodType

# 定义一个猫类
class cat():
    # 定义基本属性
    name = ''

    # 定义固定的方法
    def eat(self):
        print("猫会吃鱼")


# 动态给类添加属性
cat1 = cat()
cat1.age = 2
print(cat1.age)


# 动态给类添加方法
def run(self):
    print("猫会跑")


cat1.eat()
cat1.run = MethodType(run, cat1)
cat1.run()

运行结果:

(2)在类中对__pow__、__It__进行运算符重载,主要对的两个成绩进行平方运算、比较两个成绩

补充:类的专有方法:

  • __init__ : 构造函数,在生成对象时调用
  • __del__ : 析构函数,释放对象时使用
  • __repr__ : 打印,转换
  • __setitem__ : 按照索引赋值
  • __getitem__: 按照索引获取值
  • __len__: 获得长度
  • __cmp__: 比较运算
  • __call__: 函数调用
  • __add__: 加运算
  • __sub__: 减运算
  • __mul__: 乘运算
  • __truediv__: 除运算
  • __mod__: 求余运算
  • __pow__: 乘方

# 在类中对__pow__、__cmp__进行运算符重载,主要对的两个成绩进行平方运算、比较两个成绩
class scores:
    # 构造方法
    def __init__(self,scores1,scores2):
        self.scores1=scores1
        self.scores2=scores2

    # __pow__: 乘方运算
    def __pow__(self, power, modulo=None):
        return pow(self.scores1,power)

    # __It__:比较运算
    def __It__(self):
        if self.scores1>self.scores2:
            return self.scores1
        elif self.scores1<self.scores2:
            return self.scores2
        else:
            return "两个成绩相等"

# 实例化对象
a=scores(90,95)
# 调用pow重载方法
print(pow(a,2))
# 调用It重载方法
print(a.__It__())

运行结果:

参考网址:Python面向对象的编程思想(二):类方法的重写、动态添加方法、运算法重载_csdn8668的博客-CSDN博客

Python面向对象提升与收发邮件_哔哩哔哩_bilibili

operator --- 标准运算符替代函数 — Python 3.10.1 文档__cmp__在python3停用了,如果想实现>、>=、<=、<等比较运算符重构,需要使用operator 模块

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值