python __getattr__不适用于内置函数

时间:2019-08-21 10:01:28

标签: python built-in getattr

我正在尝试构建某种通用包装类来容纳变量对象。

class Var:
    def __init__(self, obj=None):
        self.obj=obj

    def __getattr__(self, attr):
        return getattr(self.obj, attr)

例如,现在,当我尝试将listobj一起使用时,在调用__len__属性或len内置函数时会出现不同的行为。 / p>

v1 = Var([1,2,3])

print(v1.__len__())
# output: 3

print(len(v1))
# output: TypeError: object of type 'Var' has no len()

其他内置函数也会发生这种情况。我的问题是:

  1. 在这些函数中实现的原因导致了不同的行为。

  2. 如何将Var类也与len一起使用。

1 个答案:

答案 0 :(得分:2)

您必须在__len__类内实现自己的Var方法。像这样:

class Var:
    def __init__(self, obj=None):
        self.obj=obj

    def __getattr__(self, attr):
        return getattr(self.obj, attr)

    def __len__(self):
        return len(self.obj)

v1 = Var([1,2,3])

print(v1.__len__())
print(len(v1))

输出:

pawel@pawel-XPS-15-9570:~/test$ python len.py 
3
3

在这里,您可以获得有关len()__len__之间的区别的信息:Difference between len() and .__len__()?

相关问题