Что происходит при вызове несвязанной функции во время определения класса - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь инициализировать атрибут класса, вызывая функцию.Пожалуйста, смотрите ниже.Этот код работает, как и ожидалось, в то же время он меня запутывает.Насколько я понимаю, getmemtoto - это так называемая несвязанная функция, которую нужно вызывать с экземпляром класса T. Как ее можно вызвать во время определения класса?

class T:
    def getmemtot():
        output=shell(r"sed -r -n -e 's/^MemTotal:\s*([[:digit:]]+)\s*kB/\1/ p' /proc/meminfo")
        return int(output)
    MEMTOT=T.getmemtot()

Если я попытался вызвать getmemtot напрямую, я получил следующие ошибки:

>>> T.getmemtot()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method getmemtot() must be called with T instance as first argument (got nothing instead)
>>> getmemtot()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'getmemtot' is not defined

1 Ответ

0 голосов
/ 12 июня 2018

Вместо T.getmemtot() используйте T().getmemtot().Разница в том, что T является объектом класса, тогда как T() является экземпляром класса T.

...