1.给类动态动态添加方法
在编写类的时候一般会把方法写进类中,但是如何实现给实例化对象在类外添加方法呢,这时就出现了一个类,即MethodType类,它的作用便是动态添加方法。具体看实例
from types import MethodType#导入动态添加方法类
class Cat(object):#创建猫类
def eat(self):#吃饭方法
print("猫在吃饭")
cat=Cat()#实例化对象
def run(self):#猫类外设置奔跑方法
print("猫在奔跑")
cat.run=MethodType(run,cat)#在猫类中加入奔跑方法
cat.eat()#调用猫的吃饭方法
cat.run()#调用加入后的猫的奔跑方法
结果是
猫在吃饭 猫在奔跑
2.运算符重载
运算符重载意味着在类方法中拦截内置的操作,也就是说当类的实例出现在内置操作中,Python自动调用我们的方法,并且我们的方法的返回值变成了相应操作的结果。这里主要是对pow运算符和lt运算符进行重载,具体看实例
import operator#导入operator类
class Score(object):#创建score类,重载pow运算符
def __init__(self,num):#接收参数
self.num = num
#pow运算符重载
def __pow__(self,other):#两个参数
return Score(self.num**other.num)
def __str__(self):
return "求得的数为:"+str(self.num)
class Grade(object):#创建grade类,重载lt运算符
def __init__(self,num):#接收参数
self.num = num
#lt运算符重载
def __lt__(self, other):#两个参数
if self.num > other.num: #第一个数大于第二个数,输出第一个数
return self.num
if self.num == other.num:#两者相等,输出0
return 0
if self.num < other.num:#第一个数小于第二个数,输出第二个数
return other.num
#实例化对象
s1=Score(5)
s2=Score(3)
g1 = Grade(2)
g2 = Grade(3)
#打印结果
print(s1**s2)
print(operator.lt(g2, g1))
?结果是
求得的数为:125 3?
|