__get__ Python中函数的属性

时间:2015-04-09 09:41:52

标签: python function get

我创建了一个函数:

>>> def sum(a,b):
...     return a+b
... 
>>> sum.__get__
<method-wrapper '__get__' of function object at 0x18a85f0>
>>> sum.__get__("ghj")
<bound method ?.sum of 'ghj'>

    >>> dir(sum)
    ['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '***__get__***', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
    >>>

我想知道__get__与函数的实际用法。如果有人能用功能解释每个属性的实际用法,我将感激不尽。

1 个答案:

答案 0 :(得分:1)

请记住,在Python中,一切都是对象(甚至是类和函数!) 作为对象,所有函数都有__get__方法。

__get__对于实施descriptors非常有用:

class Celsius:
    def __get__(self, instance, owner): return 9 * (instance.fahrenheit + 32) / 5
    def __set__(self, instance, value): instance.fahrenheit = 32 + 5 * value / 9

class Temperature:
    def __init__(self, initial_f): self.fahrenheit = initial_f
    celsius = Celsius()

t = Temperature(212)
print(t.celsius)
t.celsius = 0
print(t.fahrenheit)

输出:

100.0
32.0