方法的重写 子类继承了父类,可以获得父类的部分方法和成员变量。可是当父类的某个方法不适合于子类本身的特征时,可以进行覆盖重新定义父类当中的方法,即为方法的重写。 p
方法的重写
子类继承了父类,可以获得父类的部分方法和成员变量。可是当父类的某个方法不适合于子类本身的特征时,可以进行覆盖重新定义父类当中的方法,即为方法的重写。
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()比较方法并输出信息