Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何判断Python类成员是否用`@属性修饰`_Python - Fatal编程技术网

如何判断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)