我有以下python类。我想传递函数get_priority作为参数来访问对象任务。将第二个任务添加到taskManager时,我出现以下错误:
if value == array[int(middle)].acessMethod(): AttributeError: Task instance has no attribute 'acessMethod'
任务类
class Task:
def __init__(self,id,name,category="",priority=1):
self.id = id
self.name = name
self.category = category
self.priority = priority
self.concluded = False
self.active_days = 0
print("Beggining Class")
def get_name(self):
return self.name
def get_category(self):
return self.category
def get_priority(self):
return self.priority
def set_name(self,name):
self.name = name
def set_category(self,category):
self.category = category
def set_priority(self,priority):
self.priority = priority
def __str__(self):
return str(self.id) + " | " + self.name + " | " + self.category + " | " + str(self.priority) + " | "
TaskManager类
from task import Task
class TaskManager(object):
"""docstring forTaskManager."""
def __init__(self):
print("Initing TaskManager")
self.taskArray = []
"""Adding task ordered by priority"""
"""Maibe adding a check for autheticity of the object """
def addTask(self,task):
if len(self.taskArray) == 0 or self.taskArray[0].get_priority() <= task.get_priority():
self.taskArray.insert(0,task)
else:
index = self.__binarySearchIndex(task.get_priority,self.taskArray,'get_priority')
self.taskArray.insert(index,task)
def __binarySearchIndex(self,value,array,acessMethod):
middle = (len(self.taskArray) / 2) if ((len(self.taskArray) % 2) == 0) else (len(self.taskArray) / 2) + 1
if middle == 1:
middle = 0
if value == array[middle].acessMethod():
return middle
elif value < array[middle].acessMethod():
self.__binarySearchIndex(value,array[:middle])
else:
self.__binarySearchIndex(value,array[middle:])
def __str__(self):
taskString = ""
for task in self.taskArray:
taskString = taskString + str(task) + " \n"
return taskString
实际上,我采用了另一种方法,而不是按名称调用该方法,我只是创建一个lambda函数,从Task对象中提取我想要的任何属性
我还帮你调试了一下程序。首先,对二进制搜索的递归调用不会返回值,这是您想要的行为
根本不要传递包含名称的字符串。使用
methodcaller
函数例如:
如果简化
Task
类以消除不必要的getter和setter:然后可以使用
attrgetter
而不是methodcaller
使用getattr从传递的字符串中获取函数
相关问题 更多 >
编程相关推荐