【发布时间】:2015-12-16 12:05:21
【问题描述】:
我在调用BaseSocketDataHandler 类函数时遇到如下属性错误,方法是从键名中获取字符串作为字符串,并在迭代info_dict_map 时使用self.method_name = getattr(self, "self.__process_" + key.lower().replace(" ", "_")) 将其转换为方法名
AttributeError: 'DataHandler' 对象没有属性 'self.__process_info'
我不明白为什么会收到此错误。通过字符串调用函数是正确的方法,还是我应该做其他事情?
class BaseSocketDataHandler(object):
def __init__(self, sql_address, sql_user, sql_pswd, sql_db_name):
.....
self.db_connector = MySqlConnector(address=sql_address, suser=sql_user, spwd=sql_pswd, db_name=sql_db_name)
.....
self.info_dict = dict()
self.info_dict_map = {"date_time": (0, 12), "info_len": (12, 13), "info": (13, 14), "reserved": (36, 37)}
self.hex_data_dict = {"data_content": "0123456789abcdef10111213141516171819"
@staticmethod
def __convert_to_int(data):
return int(data, 16)
@staticmethod
def __process_reserved(data):
return data
def __process_date_time(self, date_time_in_hex):
date_time = tuple()
for x in date_time_in_hex:
date_time += self.__convert_to_int(x)
return date_time
def __process_info_len(self, info_len):
return self.__convert_to_int(info_len)
def __process_info(self, info):
return self.__convert_to_int(number_of_sat)
def make_info(self):
for key, val in self.info_dict_map.items():
method_name = getattr(self, "self.__process_" + key.lower().replace(" ", "_"))
key_var = key
setattr(self, key_var, method_name(self.hex_data_dict["data_content"][val[0]: val[1]]))
self._info_dict.update({key: key_var})
self.method_name = None
class DataHandler(BaseSocketDataHandler):
def __init__(self):
super(DataHandler, self).__init__(sql_address, sql_user, sql_pswd, sql_db_name)
def run_forever(self):
while True:
try:
self.make_info()
except Exception as uee:
self.log.exception(self._log_msg(uee))
break
【问题讨论】:
标签: python function methods iteration attributeerror