实现默认类实例方法

2024-06-16 09:54:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的类,我在声明'constants'将一个值映射到另一个值时使用它。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'

Tags: to方法selfidfieldmapnewreturn
2条回答

在所有情况下都无法实现自动方法调用,但是可以挂接到某些方法调用中。在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()

它不调用默认方法,但听起来您只是想重写__str__

def __str__(self):
    return self._fld_map[1]

请注意,这只是new_fld的定义,因此您可以简单地将以下内容添加到类中:

__str__ = new_fld

相关问题 更多 >