什么';在python程序中定义一些类外函数的优点是什么
为什么函数应该在Python中使用的类之外声明 例如,通过其什么';在python程序中定义一些类外函数的优点是什么,python,class,function,Python,Class,Function,为什么函数应该在Python中使用的类之外声明 例如,通过其\u散列、\u任务行和\u任务行函数执行此操作。格式如下所示: class UnknownPrefix(Exception): """Raised when trying to use a prefix that does not match any tasks.""" def __init__(self, prefix): super(UnknownPrefix, self).__init__() self.prefi
\u散列
、\u任务行
和\u任务行
函数执行此操作。格式如下所示:
class UnknownPrefix(Exception):
"""Raised when trying to use a prefix that does not match any tasks."""
def __init__(self, prefix):
super(UnknownPrefix, self).__init__()
self.prefix = prefix
def _hash(text):
return hashlib.sha1(text).hexdigest()
def _task_from_taskline(taskline):
"""
snipped out actual code
"""
return task
def _tasklines_from_tasks(tasks):
"""Parse a list of tasks into tasklines suitable for writing."""
return tasklines
但我认为这些函数与类TaskDict
有关
为什么要把他们赶出课堂?在类之外声明它们有什么好处?通常,在决定将函数放在何处时,识别将使用函数的内容非常重要。如果它们是类内部的,并且不会被程序的其他部分使用,那么将它们放在类中是有意义的。但是,如果其他部件最有可能使用它们,它们应该在模块级别 如果定义的函数都对对象中的数据进行操作,那么将函数封装到类级别才有意义。另外,如果看到类是调用这些函数的唯一对象,那么将这些函数放在类中是有意义的 将它们放在类之外的唯一好处是,如果您有其他代码将使用这些与类本身无关的函数。或者,如果您正在构建一些将由其他模块使用的帮助器函数
那么为什么或者为什么不把他们放在课堂上呢?它归结为您是否认为类应该用于代码组织。在本例中,作者显然接受了这样一种观点,即模块用于代码组织,而不是类。函数的性能优势很小
>>> import timeit
>>> timeit.Timer('foo()', 'def foo(): return 1').timeit()
0.09944701194763184
>>> timeit.Timer('A.foo()', '''
... class A(object):
... @staticmethod
... def foo():
... return 1''').timeit()
0.12048101425170898
是的,我认为,我认为函数是属于类的,不会被其他人用在类外。因此,我怀疑为什么要定义类外?反过来说:将它们放在类中有什么好处?@MartijnPieters封装。@GeorgeStocker:如果函数与实例状态无关怎么办?@MartijnPieters,那么我会将它们放在另一个文件中,或者放在有意义的地方。这是我身上的C#开发者。对我来说,奇怪的是看到函数在任何地方都挂不住,这使得很难确定它们处理的是系统的哪个部分。@GeorgeStocker:对。但是Python更灵活一些。您经常会发现在同一模块中捆绑了私有助手函数;这就是它们被使用的地方,但是它们不在类的状态上操作,所以它们被定义为类外的独立函数。这样可以保持课堂的整洁。是的,对我来说。我将把它们放在类中并定义为staticmethod。