知识回顾:
上一节中,我们深化学习了类的属性监控,主要使用了三个魔法方法:
- __getattr__
- __setattr__
- __delattr__
与此同时在书写属性设置监控的时候,千万不要忘记写__dict__方法属性。
一、类的属性监控的作业
案例:使得类的某个属性值大于10
思路:
1.设置一个类
2.定义一个__setattr__方法,用来监控属性
3.类的实例化,设置类的属性
4.通过查看类的属性的值,来看属性监控是否成功
二、类的静态方法
在类中的方法名称前加一个头标记@staticmethod。
静态方法往往用于一些自定义的类来实现一些通用的功能,可以方便我们调用类的方法。
类的静态方法,不需要self这类参数,因为类的静态方法,不需要进行实例化,就可以进行调用。
三、类的类方法
在类中的方法名称前加一个头标记@classmethod。
类的类方法的调用也不需要进行实例化。
类的类方法是在python中对类的构造方法的一个补充。
四、静态方法的定义和调用方式
定义:
@staticmethod
def 类的方法名称:
方法主体
举例
@staticmethod
def say():
print("我们是静态方法,我不需要实例化,就可以被调用")
调用:
类的名称.方法名称()
Person.say()
类方法类似于静态方法
定义:
@classmethod
def setName(cls):
name="test类方法"
print(name)
调用:
Person.setName()
类的静态方法和类方法的区别主要是在方法定义的时候的头标记不同。但在定义类方法的时候需要一个类的本身的参数。
五、总结强调
1.掌握类的静态方法
2.掌握类的类方法
3.理解静态方法与类方法的区别
4.掌握属性监控的魔法方法书写的方式,不能漏掉类内部存储的__dict__字典存储。
源代码【作业代码】:
class Person: def __init__(self): self.age=0 def __setattr__(self, key, value): if(key=="nianling"): if(value>10): self.age=value else: print("年龄不符合条件") else: self.__dict__[key]=value def __getattr__(self, item): if(item=="nianling"): return self.age p=Person() # print(p) p.nianling=6 print(p.nianling)
本节知识源代码:
#类的静态方法 class Person: name="" def __init__(self): self.age="" @staticmethod def say(): print("我们是静态方法,我不需要实例化,就可以被调用") @staticmethod def sayHello(n): name=n print(name+"您好") @classmethod def setName(cls): name="test类方法" print(name) Person.say() Person.setName() Person.sayHello("老刘")