Найти - Пользователи
Полная версия: функция и переменная с одинаковым именем в классе
Начало » Python для новичков » функция и переменная с одинаковым именем в классе
1
VadimK
Подскажите плиз, можно ли в питоне создавать класс, где переменная и функция имеют одно и тоже имя ? К примеру код:

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 

Т.е. при создании класса, мне надо в нем инициализировать паблик переменные с дефолтными значениями.
Singularity
VadimK
class completed_class():
  def __call__(self, *args, **kwargs):
    print args, kwargs
    return "call"
  def __repr__(self):
    return "repr"
  def __str__(self):
    return "str"
PanovSergey
При первом обращении к переменной ругается, а если эту переменную изменить в функции, то уже ошибки нет.
Ниче он не ругается а грит вам о то что вы обратились к методу
Далее
example.completed()
Вызывает метод completed, в котором идет присвоение,что self.completed теперь не метод, а значение True. Ну и последняя строка это и выводит.


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

class A(object):
    x = 123
    @property
    def x(self):
        return 1234
a = A()
print a.x
VadimK
Вызывает метод completed, в котором идет присвоение,что self.completed теперь не метод, а значение True. Ну и последняя строка это и выводит.
Ясно, спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB