我有以下课程,我在宣布常数时会使用这些课程。将一个值映射到另一个值。有没有在python实现一个默认方法,这样任何时候没有特定方法引用此类的实例,执行默认方法?
class FieldMap:
def __init__(self, old_field, new_field):
self._fld_map = (old_field, new_field)
def old_fld(self):
return self._fld_map[0]
def new_fld(self):
return self._fld_map[1]
SEC_ID = FieldMap('value','price')
SEC_NAME = FieldMap('entity_name', 'security_name')
SEC_TICKER = FieldMap('entity_attr', 'ticker')
#Edit: updating example to provide a real example of what i want to achieve
dict = {}
dict['price'] = 1234
print dict[SEC_ID] <--would like this to print out the value 1234 because ideally, the default method would call new_fld() and return 'price'
答案 0 :(得分:1)
在所有情况下都无法实现自动方法调用,但可以挂钩到某些方法调用。在print
的情况下,Python将尝试在实例上调用__str__
方法(如果存在)。所以你可以这样做:
class FieldMap:
def __init__(self, old_field, new_field):
self._fld_map = (old_field, new_field)
def old_fld(self):
return self._fld_map[0]
def new_fld(self):
return self._fld_map[1]
def __str__(self):
return self.new_fld()
答案 1 :(得分:1)
它没有调用默认方法,但听起来你只想覆盖__str__
:
def __str__(self):
return self._fld_map[1]
请注意,这只是new_fld
的定义,因此您只需将以下内容添加到您的课程中即可:
__str__ = new_fld