我想覆盖类中变量的get方法。 (我不确定该如何解释。)
我曾尝试过在Google上进行搜索,但没有任何帮助。
我的代码:
class Class():
self.foo = ['foo','bar']
print(Class().foo)
我要制作它,以便默认情况下它会打印出' '.join(Class().foo)
而不是Class().foo
。
您是否可以在代码中添加一些东西来使它像这样?
答案 0 :(得分:2)
您可以覆盖__getattribute__
来做到这一点:
class Thingy:
def __init__(self):
self.data = ['huey', 'dewey', 'louie']
self.other = ['tom', 'jerry', 'spike']
def __getattribute__(self, attr):
if attr == 'data':
return ' '.join(super().__getattribute__(attr))
else:
return super().__getattribute__(attr)
print(Thingy().data)
print(Thingy().other)
输出:
huey dewey louie
['tom', 'jerry', 'spike']
Python 2版本:
class Thingy(object):
def __init__(self):
self.data = ['huey', 'dewey', 'louie']
self.other = ['tom', 'jerry', 'spike']
def __getattribute__(self, attr):
if attr == 'data':
return ' '.join(super(Thingy, self).__getattribute__(attr))
else:
return super(Thingy, self).__getattribute__(attr)
print(Thingy().data)
print(Thingy().other)
请注意,通过覆盖__getattribute__
很容易进入无限循环,因此您应该小心。
实际上,几乎可以肯定有一种不那么吓人的方法,但是我现在想不起来。
答案 1 :(得分:1)
您可能想使用@property
包装器,而不是将foo
定义为属性。您可以将要打印的参数存储在私有类变量中,然后定义foo
的行为以返回字符串join。
class Class:
_foo = ['foo', 'bar']
@property
def foo(self):
return ' '.join(self._foo)
print(Class().foo)
# prints:
foo bar