我正在尝试构建某种通用包装类来容纳变量对象。
class Var:
def __init__(self, obj=None):
self.obj=obj
def __getattr__(self, attr):
return getattr(self.obj, attr)
例如,现在,当我尝试将list
与obj
一起使用时,在调用__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()
其他内置函数也会发生这种情况。我的问题是:
在这些函数中实现的原因导致了不同的行为。
如何将Var
类也与len
一起使用。
答案 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__()?