好吧,所以当我遇到这个时,我正在看一些来源:
>>> def __parse(self, filename): ... "parse ID3v1.0 tags from MP3 file" ... self.clear() ... try: ... fsock = open(filename, "rb", 0) ... try: ... fsock.seek(-128, 2) ... tagdata = fsock.read(128) ... finally: ... fsock.close() ... if tagdata[:3] == 'TAG': ... for tag, (start, end, parseFunc) in self.tagDataMap.items(): ... self[tag] = parseFunc(tagdata[start:end]) ... except IOError: ... pass ...
所以,我决定测试一下.
>>> __parse("blah.mp3")
而且,我收到了这个错误:
Traceback (most recent call last): File "", line 1, in TypeError: __parse() takes exactly 2 arguments (1 given)
这不是我第一次遇到这个,我一直以为我打算在参数列表中包含self,但我知道这不对.有人可以向我解释为什么我尝试使用的代码会发生很多这种情况,我想这是由于我对条款的理解程度,我几乎不了解init或self的作用,或者为什么它是相关的.def x(b):print b与def x(self,b)相同:self.b = b print self.b不是吗?为什么这么重要!
我只想要一个基本的解释,所以我可以忘记这一点,谢谢.
该def __parse
是一些类定义中.
你不能将方法defs从类定义中拉出来.方法函数定义是类的一部分.
看看这两个例子:
def add( a, b ): return a + b
和
class Adder( object ): def __init__( self ): self.grand_total = 0 def add( self, a, b ): self.grand_total += a+b return a+b
笔记.
该功能不使用self
.
类方法确实使用self
.通常,所有实例方法都将使用self
,除非它们具有特定的装饰器@classmethod
,否则就是这样.
该功能不依赖于其他任何东西.
类方法依赖于由类的实例调用Adder
; 此外,它取决于Adder
已正确初始化的类的实例.在这种情况下,初始化函数(__init__
)确保每个实例Adder
始终具有一个名为的实例变量,grand_total
并且该实例变量的初始值为0
.
您不能将add
方法函数拉出Adder
类并单独使用它.它不是一个独立的功能.它被定义内部类和有因为该位置的某些预期内的类.