方法的重写
子类继承了父类,可以获得父类的部分方法和成员变量。可是当父类的某个方法不适合于子类本身的特征时,可以进行覆盖重新定义父类当中的方法,即为方法的重写。
property
Python内置有三大装饰器:@staticmethod(静态方法)、@classmethod(类方法)、@property(描述符),其中静态方法就是定义在类里的函数,并没有非要定义的必要;类方法则是在调用类属性、传递类对象时使用;而@property则是一个非常好用的语法糖。@property最大的好处就是在类中把一个方法变成属性调用,起到既能检查属性,还能用属性的方式来访问该属性的作用。
语法糖指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法。 语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读。
实例需求是定义类Person,具有年龄和姓名,要求年龄必须等于18
class Person(object):
def __init__(self, name, age):
self.name = name
self.__age = 18
@property
def age(self):
return self.__age
def set_age(self, age): #定义函数来给self.__age赋值
if age < 18:
print('年龄必须大于18岁')
return
self.__age = age
return self.__age
xm = Person('xiaoming', 20)
print(xm.age)
print('----------')
xm.set_age(10)
print(xm.age)
print('----------')
xm.set_age(20)
print(xm.age)
运算符重载
定义: 让自定义类生成的对象(实例) 能够使用运算符进行操作
作用: 让实例像数学表达式一样进行运算符操作
实例:1、动态给类添加方法,具体是对猫的类中没有设置奔跑的方法,
在类外添加这个方法,并是打印显示
2、在类中对__pow__、operator模块的_lt_进行运算符重载,主要对的两个成绩进行平方运算、比较两个成绩
import operator#导入operator模块
class student(object):#定义student类
def __init__(self,name,score):#定义构造方法
self.name = name#初始化student类的name属性
self.score = score#初始化student类的score属性
def __pow__(self, power, modulo=None):#重载pow()方法
print("平方后")#输出提示信息
return pow(self.score,2)#返回经过pow()方法计算后的返回值
def __lt__(self, other):#重载operator模块的lt()比较方法
if (self.score > other.score):#判断语句:如果self的成绩大于other的成绩
print("成绩最高的是:")#输出提示信息
return self.name#返回self的name属性
elif (self.score < other.score):#判断语句:如果self的成绩小于other的成绩
print("成绩最高的是:")#输出提示信息
return other.name#返回other的name属性
else:#判断语句:如果self的成绩大于other的成绩
return 0#返回0
student1 = student("张三",5)#初始化student类的一个对象并传入name,score等参数
student2 = student("李四",6)#初始化student类的一个对象并传入name,score等参数
score = pow(student1,2)#调用重载后的student类的pow()方法并赋值给score
print(student1.name,score)#输出相关信息
print(operator.lt(student1,student2))#调用重载后的student类operator模块的lt()比较方法并输出信息