Есть ли причина, по которой вы используете статический метод? Если это так, поскольку вы не перегружаете инициализацию класса, вам нужно объявить переменную после определения метода.
Но, если вы сделаете это, вы получите новую ошибку:
NameError: name 'arg1' is not defined
Причина этого заключается в том, что вы выполняете метод внутри класса до того, как будет создан экземпляр класса, поэтому у вас никогда не будет возможности передать аргументы методу.
Итак, правильный способ сделать это - перегрузить метод __init__()
, чтобы присвоение TileTable
происходило только при создании класса:
class ImageLoader(object):
def __init__(self, arg1, arg2):
self.TileTable = self._loadTileTable(arg1, arg2)
@staticmethod
def _loadTileTable(arg1, arg2):
print arg1, arg2
Это дает вам возможность вызывать ImageLoader._loadTileTable()
без экземпляра, но также позволяет создавать переменную TileTable
экземпляра при создании экземпляра.
Использование метода класса
В ответ на мой комментарий о возможной необходимости использования метода класса, вот пример, который охватывает это:
class ImageLoader:
@classmethod
def _loadTileTable(cls, arg1, arg2):
return arg1, arg2
# We're creating the class variable outside of the class definition. If you're doing
# this in a module, no one will ever notice.
ImageLoader.TileTable = ImageLoader._loadTileTable('foo', 'bar')
Возможно, есть лучший способ сделать это, я не знаю. Но я думаю, что это охватывает то, что вы ищете:
>>> i = ImageLoader()
>>> i
<__main__.ImageLoader instance at 0x100488f80>
>>> ImageLoader.TileTable
('foo', 'bar')
>>> i.TileTable
('foo', 'bar')
Там у вас есть экземпляр i
, у которого есть доступ к переменной класса, но ImageLoader.TileTable
все еще доступен из объекта класса без необходимости в экземпляре.