一、类方法
- 二、静态方法
- 三、__del__方法(析构函数)
- 四、__call__方法
- 五、重名方法
- 六、方法的动态性
一、类方法
1.格式:
@classmethod
def 类方法名(cls[,参数列表])
方法体
2.注意:
@classmethod必须位于方法上面一行
第一个cls必须有,指类对象本身
调用:类名.类方法名(参数列表),不能给cls传值
类方法中访问实例属性和实例方法会出错
二、静态方法
1.格式:
@staticmethod
def 静态方法名(参数列表)
方法体
2.注意:
@staticmethod位于静态方法第一行
调用:类名.静态方法名
静态方法中调用实例属性和实例方法会出错
class Student():
score=100
@classmethod #类方法
def printScore(cls):
print(cls.score)
@staticmethod #静态方法
def add(a,b):
print("{0}+{1}={2}".format(a,b,(a+b)))
return(a+b)
Student.add(10,20)
Student.printScore()
三、__del__方法
1.用于实现对象销毁,释放对象占用的资源
class Person():
def __del__(self):
print("销毁对象:{0}".format(self))
p1=Person()
p2=Person()
del p2
print("程序结束")
销毁对象:<__main__.Person object at 0x0000029DC095FDF0> #销毁p2
程序结束
销毁对象:<__main__.Person object at 0x0000029DC095FFD0> #销毁p1
四、__call__方法
1.定义了__call__方法,称为可调用对象,可像函数一样被调用
class Salary():
print("计算工资")
def __call__(self, salary):
yearsalary=salary*12
monthsalary=salary
daysalary=salary/22.5
hoursalary=daysalary/8
return dict(yearsalary=yearsalary,monthsalary=monthsalary,daysalary=daysalary,hoursalary=hoursalary)
s=Salary()
print(s(4000))
计算工资
{'yearsalary': 48000, 'monthsalary': 4000, 'daysalary': 177.77777777777777, 'hoursalary': 22.22222222222222}
五、重名方法
1、其他语言中,可以定义多个重名方法,具有方法重载,而在Python中方法的参数没有类型区分,因此Python中没有方法重载,如果定义重名方法,只有最后一个有效。
class Person():
def say(self):
print("Hello!")
def say(self,name,age):
print("Hi,everyone!")
p1=Person()
p1.say("小明",18)
p1.say() #不带参数,会报错
TypeError: say() missing 2 required positional arguments: 'name' and 'age'
Hi,everyone!
六、方法的动态性
1.利用方法、函数即对象,对类外的方法进行调用
class Person:
def work(self):
print("星期一到星期五上班")
def play_game(a):
print("{0}在周末玩游戏".format(a))
def work2(a):
print("好好工作,努力挣钱")
p1=Person()
p1.work()
Person.play=play_game
p1.play()
Person.work=work2
p1.work()
星期一到星期五上班
<__main__.Person object at 0x0000026246763FD0>在周末玩游戏
好好工作,努力挣钱