Хорошо, так что я был взглянуть на какой-то источник, когда я наткнулся на это:Python, __init__ и само спутанность
>>> 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)
Это будет не первый раз, когда я столкнулся с этим, я продолжаю думать, что я имел в виду, чтобы включить себя в список параметров аргумента , но я знаю, что это неправильно. Может ли кто-нибудь объяснить мне, почему это происходит очень часто с кодом, с которым я пытаюсь поиграть, я полагаю, что из-за моего уровня понимания терминов я даже не понимаю, что такое init или self, или почему это актуально. def x (b): print b совпадает с def x (self, b): self.b = b print self.b, не так ли? Почему это так важно!
Я просто хочу дать основное объяснение, поэтому я могу получить это из головы, спасибо.
А, так что init/self следует использовать с классами, а не с классами defen aren'tinside? – 2009-03-23 18:28:28
Или, скорее, def __init__ следует использовать в классах, а def what (self, ...) следует использовать и в классах, модули/методы сами по себе не должны иметь себя? – 2009-03-23 18:29:44
Технически «я» не является ключевым словом. На практике вы должны притворяться, что это так. – Brian