2014-09-29 97 views
0

我有以下类,当我声明'常量'来映射一个值到另一个时使用。 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' 

回答

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

它不会调用默认的方法,但它听起来像是你只是想覆盖__str__

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

注意,这只是定义new_fld,所以你可以简单地添加以下内容到你的班级:

__str__ = new_fld 
+0

谢谢,这适用于打印。它不适用于像这样说虽然mydict [SEC_ID] = 1234.我知道这不正是我问,也许我会更新问题 – mike01010 2014-09-29 21:55:17

+0

在这种情况下,你需要调用'str(SEC_ID) '或使用'dict [SEC_ID] = 1234'存储元素,然后'dict [SEC_ID]'来检索。一般来说,你不能指望Python神奇地转换类型 - 它怎么知道在大多数情况下转换为字符串或整数? – 2014-09-29 22:23:09