好吧,当我发现这个时,我正在查看一些来源:
>>> 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 "<stdin>", line 1, in <module>
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 相同,不是吗?为什么它如此重要!
我只是想要一个基本的解释,这样我就可以摆脱这个问题,谢谢。
The def __parse
位于某个类定义内。
您无法将方法定义从类定义中提取出来。方法函数定义是类的一部分。
看这两个例子:
def add( a, b ):
return a + b
And
class Adder( object ):
def __init__( self ):
self.grand_total = 0
def add( self, a, b ):
self.grand_total += a+b
return a+b
Notes.
该函数不使用self
.
类方法确实使用self
。一般来说,所有实例方法都会使用self
,除非他们有特定的装饰器,例如@classmethod
不然的话。
该函数不依赖于其他任何东西。
类方法取决于类实例的调用Adder
;此外,这取决于该类的实例Adder
已正确初始化。在这种情况下,初始化函数(__init__
)保证了每个实例Adder
总是有一个名为的实例变量grand_total
该实例变量的初始值为0
.
你无法拉动add
方法函数出Adder
类并单独使用它。它不是一个独立的功能。它被定义了inside由于该位置,班级有一定的期望inside班上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)