Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 11, 2014 00:22:44

VadimK
Зарегистрирован: 2013-07-03
Сообщения: 199
Репутация: +  16  -
Профиль   Отправить e-mail  

функция и переменная с одинаковым именем в классе

Подскажите плиз, можно ли в питоне создавать класс, где переменная и функция имеют одно и тоже имя ? К примеру код:

class Example:
    completed = False
    def is_completed(self):
        if self.completed is False:
            return 'Not completed'
        else:
            return 'Completed'
    def completed(self):
        self.completed = True
    def status(self):
        return self.completed
example = Example()
print "Request 1: %s " % example.completed
example.completed()
print "Request 2: %s " % example.completed
print "Request 3: %s " % example.is_completed()

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

Request 1: <bound method Example.completed of <__main__.Example instance at 0x7f64e5f82248>> 
Request 2: True 
Request 3: Completed 

Т.е. при создании класса, мне надо в нем инициализировать паблик переменные с дефолтными значениями.

Офлайн

#2 Фев. 11, 2014 01:50:06

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

функция и переменная с одинаковым именем в классе

VadimK

class completed_class():
  def __call__(self, *args, **kwargs):
    print args, kwargs
    return "call"
  def __repr__(self):
    return "repr"
  def __str__(self):
    return "str"

Отредактировано Singularity (Фев. 11, 2014 02:49:17)

Офлайн

#3 Фев. 11, 2014 11:49:31

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

функция и переменная с одинаковым именем в классе

При первом обращении к переменной ругается, а если эту переменную изменить в функции, то уже ошибки нет.
Ниче он не ругается а грит вам о то что вы обратились к методу
Далее
example.completed()
Вызывает метод completed, в котором идет присвоение,что self.completed теперь не метод, а значение True. Ну и последняя строка это и выводит.


Подскажите плиз, можно ли в питоне создавать класс, где переменная и функция имеют одно и тоже имя ?
Нельзя.

Отредактировано PanovSergey (Фев. 11, 2014 11:50:38)

Офлайн

#4 Фев. 11, 2014 12:39:24

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

функция и переменная с одинаковым именем в классе

PanovSergey
Нельзя
дескрипторы ?

Офлайн

#5 Фев. 11, 2014 12:59:49

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

функция и переменная с одинаковым именем в классе

дескрипторы ?
Не думаю что ТС это имеет виду, да и под условие вроде как не подходит. Дескриптор не даст одновременно обращаться как к переменной так и к методу.

class A(object):
    x = 123
    @property
    def x(self):
        return 1234
a = A()
print a.x

Отредактировано PanovSergey (Фев. 11, 2014 13:07:04)

Офлайн

#6 Фев. 11, 2014 19:05:14

VadimK
Зарегистрирован: 2013-07-03
Сообщения: 199
Репутация: +  16  -
Профиль   Отправить e-mail  

функция и переменная с одинаковым именем в классе

Вызывает метод completed, в котором идет присвоение,что self.completed теперь не метод, а значение True. Ну и последняя строка это и выводит.
Ясно, спасибо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version