Manevant
@Manevant
Учу Python

Как python возвращает значения методов?

Недавно начал изучать python и ооп в частности.

Не понимаю логику возврата значений из методов класса. Подскажите, будьте добры.
Пример.
from datetime import date

class school:
    address = "Hoggwart castle, 1 ave/34"
    school_number = 532
    teachers = 25
    scholars = 323
    __director = "Dumbledor"
    def __init__(self):
        self.init_time = datetime.now()
        print "Current time is %s" % self.init_time
    def school_address():
        a = "School andress is %s" % address
        print "print in school_address"
        return a

a = school()
a.school_address
print a.school_address

В консоль попадает как и ожидалось время вызова экземпляра, но не попадает принт метода school_address
Вывод
Current time is 2013-12-29 22:06:37.479000
<bound method school.school_address of <__main__.school instance at 0x259c0c>>

Объясните пожалуйста что я делаю не так?
Где об этой механике можно прочитать подробнее?
Заранее благодарю.
  • Вопрос задан
  • 4039 просмотров
Решения вопроса 1
dizballanze
@dizballanze
Software developer at Yandex
Работающий вариант:

from datetime import datetime

class school:
    address = "Hoggwart castle, 1 ave/34"
    school_number = 532
    teachers = 25
    scholars = 323
    __director = "Dumbledor"
    def __init__(self):
        self.init_time = datetime.now()
        print "Current time is %s" % self.init_time
    def school_address(self):
        a = "School andress is %s" % school.address
        print "print in school_address"
        return a

a = school()
print a.school_address()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
так вы ж метод не вызвали...

print a.school_address()
Ответ написан
метод должен вызываться со скобками
print a.school_address()
Ответ написан
Комментировать
@onepavel
Консультация и разработка мобильных приложений
Случаем self в реализации метода передавать не нужно ?
Ответ написан
Комментировать
Manevant
@Manevant Автор вопроса
Учу Python
Спасибо, было 2 ошибки, это и запутало :)
Ответ написан
Комментировать
ali_aliev
@ali_aliev
Разработчик на Django/Python, JavaScript
Сразу видно, вы рубист, если вы так вызываете методы питона :-) a.school_address вернет ссылку на объект вашего метода, а не вызовет его, таким же образом можно выполнить:

f = a.school_address
f()


и метод вызовется.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы