cccyyys 发表于 2021-6-29 10:03

【笔记】多态、特殊方法和运算符重载

多态
多态是指同一个方法调用由于对象的不同可能产生不同的行为。
注意点:1、多态是方法的多态,属性没有多态。
2、多态的存在有2个不要条件:继承、方法重写。
class Person:
    def eat(self):
      print('吃饭了!')
class Chinese(Person):
    def eat(self):
      print("中国人使用筷子吃饭")
class English(Person):
    def eat(self):
      print("英国人使用刀叉吃饭")
class Indian(Person):
    def eat(self):
      print("印度人使用右手吃饭")

def manEat(m):
    if isinstance(m,Person):#m如果是Person的子类,那么会调用该子类的eat方法,如果不是,无法调用
      m.eat()
    else:
      print('未知')
      
manEat(Chinese())#输入Person的子类才会进行调用
运行结果:中国人使用筷子吃饭
这个只是为了测试多态,m只有为Person子类时才会调用eat方法,不同的子类打印出的结果不同,如果不属于Person的子类,则无法调用。
好了,到此面向对象的三大特征就学习完了,下面是特殊方法和运算符重载。
特殊方法和运算符重载
Python中的运算符实际上是通过调用对象的特殊方法实现的,比如:
a = 20
b = 30
c = a+b
d = a.__add__(b)
print("c=:",c)
print("d=:",d)
运算结果:c=: 50
d=: 50
实际上“+”号就是代替了__add__()方法,比较便于操作。

这是运算符对应的方法。
常见的特殊方法如下:
我们也可以重写特殊方法,实现方法的重载。
class Person:
    def __init__(self,name):
      self.name = name
    def __add__(self, other):#重载加法
      if isinstance(other,Person):
            print("{0}----{1}".format(self.name,other.name))
      else:
            print('无法相加')
    def __mul__(self, other):#重载乘法
      if isinstance(other,int):
            print(self.name*other)
      else:
            print("不能相乘")


s1 = Person("cys")
s2 = Person("jdx")
p = s1+s2
x = s1*3
运算结果为:cys----jdx
cyscyscys
这里就实现了加法与乘法的重载,将该方法修改成我们想要的方法。
页: [1]
查看完整版本: 【笔记】多态、特殊方法和运算符重载