gpt4 book ai didi

python - 如何在 Python 中使用 __slots__ 获取类中的实例属性名称值

转载 作者:行者123 更新时间:2023-11-28 22:26:44 26 4
gpt4 key购买 nike

当定义两个类时,一个类具有 __dict__ 实现(A),另一个具有 __slots__ 实现(B)。

是否有一种聪明的方法来获取 __slots__ 类的实例属性名称和值,就像我在 __dict__ 类上使用 vars() 函数一样?

class A(object):
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z


class B(object):
__slots__ = ('x', 'y', 'z')
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z


vars(A(1, 2, 3)) # {'y': 2, 'x': 1, 'z': 3}
vars(B(1, 2, 3)) # TypeError: vars() argument must have __dict__ attribute

使用 .__slots__ 或 dir() 进行检查将只返回属性名称,没有值

B(1, 2, 3).__slots__ # ('x', 'y', 'z')

最佳答案

这是我以前用过的一个函数:

def vars2(obj):
try:
return vars(obj)
except TypeError:
return {k: getattr(obj, k) for k in obj.__slots__}

关于python - 如何在 Python 中使用 __slots__ 获取类中的实例属性名称值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44593980/

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