gpt4 book ai didi

Python @property.setter

转载 作者:太空宇宙 更新时间:2023-11-04 06:03:56 25 4
gpt4 key购买 nike

创建装饰器的基本方法是

def my_decorator(f):
def _f(*args, **kwargs):
# do something using f
pass
return _f

@my_decorator
def f(...):
...

但那样你就不能像 @property.setter 那样定义装饰器,因为属性的名称(因此装饰器的名称)每次都不一样。

@property.setter是怎么定义的呢?是否有可能在 Python 中做类似的事情,或者它是否只有 C(实现)级别的内置功能?

最佳答案

你要找的是一个叫做 descriptor 的东西:

 class Descriptor(object):
def __get__(self, instance, _type=None):
pass
def __set__(self, obj, value):
pass

您可以自由实现您认为合适的事情。 property 装饰器只是描述符的一个实例(或多或少),您可以在描述此项的文档中看到他们如何实现它。

这是一个例子:

  class _Wrapper(object):
def __init__(self, caller, instance):
self.caller = caller
self.instance = instance

def __call__(self, *args, **kwargs):
print "I've been wrapped!"
return self.caller(self.instance, *args, **kwargs)

class Accouncer(object):
def __init__(self, method):
self.method = method

def __get__(self, instance, _type=None):
return _Wrapper(self.method, instance)

def vocal(func):
return Accouncer(func)

class Ha(object):
@vocal
def stuff(self):
return 1

关于Python @property.setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23246400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com