2014-09-29 6 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

+0

В этом случае вам нужно либо вызвать 'str (SEC_ID) 'или хранить элементы, используя' dict [SEC_ID] = 1234', а затем 'dict [SEC_ID]' для извлечения. В общем, вы не можете ожидать, что Python будет магически конвертировать типы - как бы он знал, чтобы преобразовать в строку или целое число в большинстве случаев? –

Смежные вопросы