1.super()函数
主要是用来调用父类的方法,在子类中调用父类的方法时进行使用。
2.私有方法、私有属性
(1)定义方法:
在类的内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数。
(2)私有方法:
__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用 self.__private_methods。
(3)私有属性:
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
3.property() 函数
(1)作用:
在新式类中返回属性值。
(2)语法:
class property([fget[, fset[, fdel[, doc]]]])
(3)参数:
fget——获取属性值的函数
fset——设置属性值的函数
fdel——删除属性值函数
doc——属性描述信息
4.重载
基础重载方法
方法 |
描述 |
简单的调用 |
__init__ ( self [,args...] ) |
构造函数。 |
obj = className(args) |
__del__( self ) |
析构方法, 删除一个对象。 |
del obj |
__repr__( self ) |
转化为供解释器读取的形式。 |
repr(obj) |
__str__( self ) |
用于将值转化为适于人阅读的形式。 |
str(obj) |
__cmp__ ( self, x ) |
对象比较。 |
cmp(obj, x) |
运算符重载
方法 |
描述 |
何时调用 |
__add __ |
+ |
X+Y, X+=Y |
__sub __ |
- |
X-Y,X-=Y |
__mul __ |
* |
X*Y |
__pow__ |
** |
X**Y |
__cmp __ |
比较:== |
X==Y,X<Y |
__lt __ |
比较:< |
X<Y |
__eq __ |
比较:= |
X=Y |
__str __ |
打印转换 |
print X,str(X) |
例:
class Vector:
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
return 'Vector (%d, %d)' % (self.a, self.b)
def __add__(self,other):
return Vector(self.a + other.a, self.b + other.b)
v1 = Vector(2,10)
v2 = Vector(5,-2)
print (v1 + v2)
运行效果:
Vector(7,8)
5.单下划线、双下划线、头尾双下划线说明:
__foo__:定义的是特殊方法,一般是系统定义名字,类似 __init__() 之类的。
_foo:以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import * 。
__foo:双下划线的表示的是私有类型(private)的变量,只能是允许这个类本身进行访问了。
6.案例
(1)动态给类添加方法,具体是对猫的类中没有设置奔跑的方法, 在类外添加这个方法,并是打印显示。
小猫类:Cat
"""
1.动态添加方法
要求
动态给类添加方法,具体是对猫的类中没有设置奔跑的方法,在类外添加这个方法,并是打印显示。
"""
# 小猫类
class Cat:
# 构造方法实例化对象属性
def __init__(self, name, sex, food):
self.name = name
self.sex = sex
self.food = food
# 动态添加对象的run方法
def run(self):
print("可爱的{}是个{}性龙猫,它很喜欢吃{},它正在欢快地奔跑!".format(self.name, self.sex, self.food))
def main():
# 创建一个小猫类的对象:cat1
cat1 = Cat("叮当", "雄", "鲜嫩多汁的植物")
# 调用动态添加的run方法
cat1.run = run
# 调用创建的小猫类对象的run方法
cat1.run(cat1)
if __name__ == "__main__":
main()
运行结果:
可爱的叮当是个雄性龙猫,它很喜欢吃鲜嫩多汁的植物,它正在欢快地奔跑!
(2)在类中对__pow__、__cmp__进行运算符重载,主要对的两个成 绩进行平方运算、比较两个成绩。
成绩类:Grade
"""
2.运算符重载
要求:
在类中对__pow__、__cmp__进行运算符重载,主要对的两个成绩进行平方运算、比较两个成绩。
"""
# 创建Grade成绩类,重载pow和cmp运算符
class Grade:
# 构造方法实例化对象属性
def __init__(self, name, grade): # 接收参数
self.name = name
self.grade = grade
# 重载pow运算符
def __pow__(self, other, modulo=None):
return pow(self.grade, 2)
# 重载cmp运算符
def __cmp__(self, other): # 两个参数
if self.grade > other.grade: # 第一个数大于第二个数,输出第一个数
return self.grade
if (self.grade == other.grade):
return "二者相等"
if self.num < other.num: # 第一个数小于第二个数,输出第二个数
return other.num
def main():
# 实例化Grade的对象
a = Grade("小明", 99)
b = Grade("小红", 96)
# 打印结果
print(a.__pow__(99)) # 输出平方
print(b.__pow__(96)) # 输出平方
print(a.__cmp__(b)) # 输出最大值
if __name__ == "__main__":
main()
运行结果:
9801
9216
99