如何判断Python类成员是否用`@属性修饰`
我正在对如何判断Python类成员是否用`@属性修饰`,python,Python,我正在对UUID进行子类化,并试图弄清楚UUID.hex是常规成员还是用@property修饰的方法。我必须查看源代码才能找到答案,这让我怀疑是否还有其他方法 导入uuid >>>x=uuid.uuid('00001800000010800005F9B34FB') >>>打印([attr for attr in dir(x)(如果可调用)(getattr(x,attr))])) “UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUID
进行子类化,并试图弄清楚UUID.hex
是常规成员还是用@property
修饰的方法。我必须查看源代码才能找到答案,这让我怀疑是否还有其他方法
导入uuid
>>>x=uuid.uuid('00001800000010800005F9B34FB')
>>>打印([attr for attr in dir(x)(如果可调用)(getattr(x,attr))]))
“UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU","新","减少","减少","减少","报告","设置属性","设置状态","大小","str
>>>打印([attr for attr in dir(x)如果不可调用(getattr(x,attr))]))
[uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
是:
@属性
def十六进制(自身):
返回“%032x”%self.int
这是一个用@属性修饰的方法。我有点期待hex
会显示为callable()
,但事实并非如此。有没有办法通过检查类或对象来判断这一点
谢谢 Python中的属性
decorator接受一个方法并将其包装到类上定义的属性中。然后,该类的实例足够聪明,可以在引用属性时表现出不同的行为
让我们用一个属性和一个字段以及该类的一个实例来设置一个简单的类,以进行测试
class A:
def __init__(self):
self.my_field = "foo"
@property
def my_property(self):
return "foo"
a = A()
然后,如果我们在REPL中检查这个类,我们会看到a.my_字段
和a.my_属性
都是“foo”
。更有趣的是,A.my_字段
是一个属性错误
,A.my_属性
是一个属性
对象(即属性
类的一个实例)。这正是我们可以使用的
def is_property(class_, name):
try:
return isinstance(getattr(class_, name), property)
except AttributeError:
return False
如果该名称在类中不存在,则返回False
,因为它肯定不是属性。如果存在,则检查它是否是属性
类的实例。如
is_property(A, 'my_field')
is_property(A, 'my_property')
(注意,我们使用的是类,而不是实例;字段名是字符串)
它不可调用,因为您无法编写实例.hex()
相关:@Alex,谢谢,是的!您的is\u属性
函数可以只返回isinstance(getattr(class\u,name,False),property)
?