类方法和静态方法
类方法
@classmethod
默认传递类的一个装饰器
静态方法
@staticmethod
默认什么参数的不传的一个装饰器
示例:
代码:
class Student(object):
def __init__(self, name):
print('实例方法-self', self)
self.name = name
def learning(self):
print('年龄为%d的%s正在学习' % (self.__age, self.name))
@classmethod
def listen(cls):
print('类方法-cls', cls)
cls.run() # 可以调用类的静态方法
@staticmethod
def run():
print('这是静态方法')
if __name__ == '__main__':
m = Student('snji')
m.listen()
m.run()
代码执行效果:
property类属性
@property
将类方法的使用方式转换为类属性的使用方式
测试:
单例模式
要求: 单例模式要求在实例化对象的时候,只能实例化一次
- 用装饰器来实现
代码:
from functools import wraps
def simple(fun):
i = {}
@wraps(fun)
def wrappers(*args, **kwargs):
if fun not in i:
i[fun] = fun(*args, **kwargs)
return i[fun]
return wrappers
# 单例模式装饰器的实现就是之前的代码,后面是一个小小例子
@simple
class Student(object):
def __init__(self, name):
self.name = name
if __name__ == '__main__':
result1 = Student("westos")
print(result1.name)
result2 = Student("snji")
print(result2.name)
测试:
- 用类的__new__来实现单例模式
示例: