Привязать атрибут объекта к методу

#python #properties

#python #свойства

Вопрос:

Это основной вопрос Python. Давным-давно я видел что-то подобное, и я считаю, что это было в Python. Возможно ли это, или я ошибаюсь?

Я прошу способ сделать это; приведенный ниже пример — это просто воображаемый код того, как он мог бы работать, но не работает.

 class SomeClass:
    def someMethod(self):
        return self.name   ' '   self.id

    name = 'A name'
    id = '37'
    fullClassName = someMethod  # reading this attribute would actually call the method
  
 >>> a = SomeClass()
>>> print a.fullClassName  # no parentheses as it's not a method call
A name 37
  

Комментарии:

1. Возможно ли , что произошло, когда вы попробовали это?

2. Почему вы просто не попробовали это? Функции — это тоже просто объекты, поэтому вы можете добавить другое имя, которое является псевдонимом, да.

3. Я пробовал так, но, конечно, это не сработало, я спрашиваю, есть ли правильный способ сделать это или это вообще невозможно. Не опускайте голос, если вы не получили вопрос.

4. Когда он вызывается, a = SomeClass() a.fullClassName он возвращает <bound method SomeClass.someMethod of <__main__.SomeClass instance at 0x7fd30ea9afc8>> . Я хочу, чтобы скобки не вызывались как метод, а как атрибут.

5. Я думаю, вам нужно «свойство».

Ответ №1:

Вы ищете свойство.

 >>> class SomeClass:
...     name = 'A name'
...     id = '37'
...
...     @property
...     def someMethod(self):
...         return self.name   ' '   self.id
...
...     fullClassName = someMethod
...
>>> a = SomeClass()
>>> print a.fullClassName
A name 37
>>>
  

или просто

 >>> class SomeClass:
...     name = 'A name'
...     id = '37'
...
...     @property
...     def fullClassName(self):
...         return self.name   ' '   self.id
...
>>> a = SomeClass()
>>> print a.fullClassName
A name 37
>>>
  

Комментарии:

1. Большое вам спасибо! Я не знал об этом, я подробнее прочитаю о свойствах. Всегда полезно спрашивать и учиться, даже если я проголосую.