1

私はpython初心者です。使用したいメソッド(getService)を持つpythonクラスがあります

class ServicesManager
   def __init__(self, logger):
      ...initialize stuff

   def getService(self, name):
      ... do some stuff

   def anotherMethod():
      ... do more stuff

別のクラスから、これが私がそれを呼んでいる方法です

from ServicesManager import ServicesManager
class serviceCaller:
   def __init__(self, logger):
      self.logger = logger
      self.sm = ServicesManager(self.logger)

   myService = self.sm.getService('serviceA')

しかし、私がそれを実行すると、私は受け取ります

Traceback (most recent call last):
  File "./serviceCaller.py", line X, in <module>
    class serviceCaller: 
  File "./serviceCaller.py", line Y, in serviceCaller
    myService = self.sm.getService('serviceA')
NameError: name 'self' is not defined

私は何が間違っているのでしょうか?クラスは別々のファイルにあります

4

2 に答える 2

3

myService はありません__init__。これはクラス レベルであり、クラスの構築時に実行されることを意味します。ただし、その時点では、一般にあるクラスのインスタンスはありませんself。(結局のところ、クラスはまだ存在していません!)。

私の最善の推測は、あなたがこれをやりたかったということです:

from ServicesManager import ServicesManager
class serviceCaller:
   def __init__(self, logger):
      self.logger = logger
      self.sm = ServicesManager(self.logger)

      #Notice myService is indented under `__init__`.
      myService = self.sm.getService('serviceA')
于 2013-06-26T21:22:39.657 に答える
2

この線:

myService = self.sm.getService('serviceA')

__init__が定義されている関数の一部になるようにインデントされていませんself

その関数の一部にするつもりなら、インデントする必要があります。

于 2013-06-26T21:23:01.757 に答える