在方法中,“如果自我不是无”是什么意思?

2024-10-04 11:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

class omnimethod(object):
    def __init__(self, func):
        self.func = func

    def __get__(self, instance, owner):
        return functools.partial(self.func, instance)

class Geocoder(object):
        def __init__(self, api_key=None, client_id=None, private_key=None):
            # omitted
            pass

        @omnimethod
        def geocode(
            self,
            address,
            sensor='false',
            bounds='',
            region='',
            language='',
            components=''):
                if self is not None:  # <-- here
                    return GeocoderResult(self.get_data(params=params))
                else:
                    return GeocoderResult(Geocoder.get_data(params=params))

正是在这种情况下

我不明白。“if self not None”代码段是什么意思?它在案件中的地位是什么?该自身是函数参数中的参数。但只有我一个人


Tags: instancekeyselfnonegetreturnifobject
1条回答
网友
1楼 · 发布于 2024-10-04 11:33:01

omnimethod看起来是一个装饰器,用于将其应用到的函数作为实例或类方法调用

让我们调用原始函数original和应用decorator的结果,它将成为类Geocoderdecoratedgeocode属性

考虑两个调用:

Geocoder.geocode("some address")  # 1
geocoder = Geocoder()
geocoder.geocode("some address")  # 2

根据descriptor protocol报告:

呼叫(1)将解析为:

  • decorated.__get__(None, Geocoder)("some address"),返回部分应用于None的原始函数:
  • functools.partial(original, None)("some address"),根据{}的实现,它与:
  • original(None, "some address")

呼叫(2)将解决以下问题:

  • decorated.__get__(geocoder, Geocoder)("some address")(其中geocoderGeocoder的实例)
  • functools.partial(original, geocoder)("some address")
  • original(geocoder, "some address")

因此,self如果作为类方法调用,那么它将在原始函数内None,因此需要进行检查

相关问题 更多 >