有没有一种方法可以重载python中的成员访问运算符?示例(由于可能是XY问题,我将提供一个包含我要执行的操作的示例):
class A:
def __someOverload__(self, name, *args):
if (name == "foo") print("HW!")
a = A()
a.foo()
>>> HW!
答案 0 :(得分:2)
您可以尝试覆盖getattr:
class A:
def __getattr__(self, name):
if name == "foo":
return lambda: print("hi")
>>> a = A()
>>> a.foo()
hi
一个更复杂的示例:
class A:
def __getattr__(self, name):
if name == "foo":
return lambda *args: print(args)
>>> a = A()
>>> a.foo(1, 2, 3)
(1, 2, 3)
答案 1 :(得分:0)
可以更改Python内置函数的默认行为。我们只需要在类中定义相应的特殊方法即可。
class Purchase:
def __init__(self, basket, buyer):
self.basket = list(basket)
self.buyer = buyer
def __len__(self):
return len(self.basket)
purchase = Purchase(['pen', 'book', 'pencil'], 'Python')
print(len(purchase))
此处,输出为3。 希望这会有所帮助:)
答案 2 :(得分:0)
为此,我将使用setattr:
>>> class A:
>>> def __init__(self):
>>> setattr(self, 'foo', lambda: print('foo'))
>>>
>>> a = A()
>>> a.foo()
foo