我在python中遇到了unbound方法错误
class Sample(object):
'''This class defines various methods related to the sample'''
def drawSample(samplesize,List):
sample=random.sample(List,samplesize)
return sample
Choices=range(100)
print Sample.drawSample(5,Choices)
在阅读了许多有用的文章之后,我想到了如何添加上面的@staticmethod
来使代码工作。我是个Python新手。有人能解释一下为什么要定义静态方法吗?或者,为什么不是所有的方法都定义为静态方法?
这并不是你真正要问的问题,但是既然你已经说过你是一个python新手,也许这会有帮助,而且没有其他人明确地说出来。
我决不会通过使方法成为静态方法来修复上述代码。我要么就放弃这门课,写一个函数:
如果有许多相关函数,可以将它们分组到一个模块中—例如,将它们全部放在一个名为
sample.py
的文件中;然后或者我会在类中添加一个
__init__
方法,并创建一个具有有用方法的实例:(我还更改了上面示例中的大小写约定,以匹配PEP 8推荐的样式。)
Python的一个优点是它不会强迫您对所有内容使用类。只有当存在应该与方法关联的数据或状态时,才可以使用它们,这就是类的用途。否则您可以使用函数,这就是函数的用途。
详细说明见this article。
TL;DR
1.它消除了
self
参数的使用。2.它减少了内存使用,因为Python不必为每个对象实例化bound-method:
3.它提高了代码的可读性,表示该方法不依赖于对象本身的状态。
4.它允许方法重写,因为如果方法是在模块级(即类之外)定义的,则子类将无法重写该方法。
静态方法的用途有限,因为它们不能访问类实例的属性(像常规方法那样),也不能访问类本身的属性(像类方法那样)。
所以它们对日常方法没有用处。
但是,它们可以用于将一些实用程序函数与一个类(例如,从一种类型到另一种类型的简单转换)组合在一起,该类不需要访问除了所提供的参数以外的任何信息(可能还有一些对模块全局的属性)
它们可以放在类之外,但是在类内部对它们进行分组可能有意义,因为它们只适用于类。
您还可以通过实例或类而不是模块名来引用方法,这可能有助于读者理解该方法与哪个实例相关。
相关问题 更多 >
编程相关推荐