当前位置:  开发笔记 > 编程语言 > 正文

Python,__ init__和自我混淆

如何解决《Python,__init__和自我混淆》经验,为你挑选了1个好方法。

好吧,所以当我遇到这个时,我正在看一些来源:

>>> 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不是吗?为什么这么重要!

我只想要一个基本的解释,所以我可以忘记这一点,谢谢.



1> S.Lott..:

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类并单独使用它.它不是一个独立的功能.它被定义内部类和有因为该位置的某些预期的类.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有