繁体   English   中英

检查python类的实例是否具有属性而不实例化该类

[英]Check if instance of python class has attribute without instantiating the class

是否可以在不(能够)实例化类的情况下检查类的实例是否具有属性?

例子:

我缺乏关于实例化参数的知识A类:

class A:
    def __init__(self, unkown):
        self.a = 1

检查 A 类中的属性 a 失败:

hasattr(A,'a')
>> False

检查类A实例中的属性 a 会成功:

hasattr(A(1),'a')
>> True

是否可以在不实例化A的情况下检查属性a 也许与hasattr不同的东西?

一般来说,这是不可能的。 您可以随时在A的任何实例上自由设置任何属性。 考虑

a = A('foo')
setattr(a, input('attr_name: '), 'bar')

A无法知道将来可能会或可能不会在其实例上设置哪些属性。

如果您想将问题限制在__init__中设置的属性,您可以做一些疯狂的事情,例如解析__init__ ,但很可能我们在这里遇到了 XY 问题。

由于这是不可能的,解决方法可以是创建a属性:

class A:
    def __init__(self, unkown):
        self._a = 1
    @property
    def a(self):
        return self._a
        
hasattr(A,'a')
>> True

只是为了完整性而将其留在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM