gpt4 book ai didi

python - 有没有办法查找 python 对象是否具有属性?

转载 作者:太空狗 更新时间:2023-10-30 02:51:16 26 4
gpt4 key购买 nike

我正在尝试验证 python 对象是否在其方法之一的定义中具有属性,这里有一些代码可以澄清:

class A :
def __init__(self) :
self.__a = 5
def hasAttr(self) :
if hasattr(self, '__a'):
print(True)
else :
print(False)

如果我执行代码

x = A()
x.hasAttr()

我得到 False,我知道它不起作用的原因是该属性实际上是私有(private)的,但我不打算访问类之外的属性,我只是想验证属性是否已定义,我知道我可以随时使用:

class A :
def __init__(self) :
self.__a = 5
def hasAttr(self) :
if ('_'+self.__class__.__name__ + '__a') in self.__dict__:
print(True)
else :
print(False)

但是有没有更温和的方法呢?

最佳答案

双下划线变量是name mangled在方法前面添加类名,所以 __a 变成 _A__a 正如你正确识别的那样,因此你在第一种情况下得到 False

类似地,您可以在第二种情况下执行 hasattr(self, '_'+self.__class__.__name__ + '__a')

class A :

def __init__(self) :
self.__a = 5

def hasAttr(self) :

attr_name = f'_{self.__class__.__name__}__a'
if hasattr(self, attr_name):
print(True)
else :
print(False)

x = A()
x.hasAttr()

或者您可以使用 EAFP 方法尝试访问变量,并相应地打印 True 或 False

class A :

def __init__(self) :
self.__a = 5

def hasAttr(self):

attr_name = f'_{self.__class__.__name__}__a'
try:
getattr(self, attr_name)
print(True)
except:
print(False)

x = A()
x.hasAttr()

输出将为 True

关于python - 有没有办法查找 python 对象是否具有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56514956/

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