修饰器
在面向对象(OOP)的设计模式中,decorator被称为装饰模式。
OOP的装饰模式需要通过继承和组合来实现,而Python除了能支持OOP的decorator外,直接从语法层次支持decorator。
Python的decorator可以用函数实现,也可以用类实现。
decorator可以增强函数的功能,定义起来虽然有点复杂,但使用起来非常灵活和方便。
因为Python支持用函数实现修饰,所以才有利用修饰器去将一个方法修饰的像属性一样,直接调用方法名字就可以修改查看等操作。
修饰器方法属性化
class Person(object):
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name
@name.setter
def name(self, value):
self.__name = value
@name.getter
def name(self):
print(self.__name)
return self.__name
def show(self):
print(self.__name)
p = Person("Parker")
p.show()
p.name = "Andrew"
get_name = p.name
# Output:
# Parker
# Andrew
升级:方法属性化方法
class Person(object):
def __init__(self, name):
self.__name = name
def __get(self):
return self.__name
def __set(self, value):
self.__name = value
name = property(__get, __set)
# @property
# def name(self):
# return self.__name
#
# @name.setter
# def name(self, value):
# self.__name = value
#
# @name.getter
# def name(self):
# print(self.__name)
# return self.__name
def show(self):
print(self.__name)
p = Person("Parker")
# getters
print(p.name)
# setters
p.name = "Andrew"
# 可见,通过修饰器把方法属性化,只需要像属性一样使用变量就能达到访问修改的目的!Awesome!
p.show()
# Output:
# Parker
# Andrew
虽然标题是进阶,其实也不过是换一个表示方法。
小结
最终都是想通过修饰器把方法变得像属性一样方便访问和修改,而属性的控制,完全掌握在修饰器中,可读可写可删除,随意定制修饰器就可以!