gpt4 book ai didi

python - 为什么hasattr会执行@property装饰器代码块

转载 作者:太空狗 更新时间:2023-10-29 22:07:51 25 4
gpt4 key购买 nike

在 Python 中,当我在 @property 装饰器上调用 hasattr 时,hasattr 函数实际上运行 @property 代码块。

例如一个类:

class GooglePlusUser(object):

def __init__(self, master):
self.master = master

def get_user_id(self):
return self.master.google_plus_service.people().get(userId='me').execute()['id']


@property
def profile(self):
# this runs with hasattr
return self.master.google_plus_service.people().get(userId='me').execute()

运行以下代码调用配置文件属性并实际进行调用:

#Check if the call is an attribute
if not hasattr(google_plus_user, call):
self.response.out.write('Unknown call')
return

为什么?如何在不调用 api 的情况下解决这个问题?

最佳答案

hasattr() 通过实际检索属性 来工作;如果抛出异常,hasattr() 返回 False。这是因为这是了解属性是否存在的唯一可靠方法,因为有很多动态方法可以将属性注入(inject) Python 对象(__getattr____getattribute__属性 对象、元类等)。

来自hasattr() documentation :

This is implemented by calling getattr(object, name) and seeing whether it raises an exception or not.

如果您不想在执行此操作时调用属性,则不要使用 hasattr。使用 vars()(它返回实例字典)或 dir()(它也为您提供类的名称列表)。

关于python - 为什么hasattr会执行@property装饰器代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30143957/

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