我有一个需要辅助函数的类,例如一个只使用传入参数而不是类的任何属性来计算校验和的类。此函数仅由类的方法调用。所以我不需要传入“self”作为函数的第一个形式。
我应该如何实现这些功能?我可以在一个类中使用非方法函数吗?我应该在课堂之外定义它们吗(即使它们没有被其他任何东西使用)?或者它们可以成为常规方法吗?
我有一个需要辅助函数的类,例如一个只使用传入参数而不是类的任何属性来计算校验和的类。此函数仅由类的方法调用。所以我不需要传入“self”作为函数的第一个形式。
我应该如何实现这些功能?我可以在一个类中使用非方法函数吗?我应该在课堂之外定义它们吗(即使它们没有被其他任何东西使用)?或者它们可以成为常规方法吗?
如果您想要一个不将 self 作为参数的类中的函数,请使用@staticmethod
装饰器:
class Awesomeness(object):
def method(self, *args):
pass
@staticmethod
def another_method(*args):
pass
但是,从概念的角度来看,我肯定会考虑将它放在模块范围内,特别是如果它是一个不使用实例或类属性的校验和函数。
只需执行一个嵌套函数:
class Foo(object):
def bar(self, arg):
def inner(arg):
print 'Yo Adrian imma in inner with {}!'.format(arg)
inner(arg)
Foo().bar('argument')
或者只是忽略self
:
class Foo(object):
def prive(_, arg):
print 'In prive with {}!'.format(arg)
def bar(self, arg):
def inner(arg):
print 'Yo Adrian imma in inner with {}!'.format(arg)
inner(arg)
self.prive(arg)
def foo(self,arg):
self.prive(arg)
Foo().bar('argument')
Foo().foo('another argument')
第二个示例打印:
Yo Adrian imma in inner with argument!
In prive with argument!
In prive with another argument!