2015-12-01 6 views
2

У меня есть простая установка класса здесь. Я хочу, чтобы сообщение «печатать» было напечатано, когда я установил атрибут «info» объекта класса Грузовик.Python - класс атрибута атрибута объекта не работает

Ничто не кажется, что происходит, когда я устанавливаю свойство информации c.info = "Great" Я бы ожидать, что напечатать «это создается»

# Classes 
class Node(object): 
    def __init__(self, name, age): 
     self.name = name 
     self.age = age 

class Truck(Node): 
    def __init__(self, name="", age=0): 
     super(Truck, self).__init__(name=name, age=age) 
     self.info = None 

     @property 
     def info(self): 
      return self.info 

     @info.setter 
     def info(self): 
      print "this is being set" 


c = Truck() 
c.info = "great" 
print c.info 
+7

Ваших отступ @ свойства слишком далеко. – BrenBarn

+0

, который, как представляется, не исправил его – JokerMartini

+4

Отредактируйте вопрос, чтобы исправить отступ, чтобы мы знали, что больше не будем беспокоиться об этом. – tdelaney

ответ

4

setter The необходимо принять в value. Кроме того, сохраните данные в self._info, чтобы избежать рекурсивных вызовов до self.info().

class Node(object): 
    def __init__(self, name, age): 
     self.name = name 
     self.age = age 

class Truck(Node): 
    def __init__(self, name="", age=0): 
     super(Truck, self).__init__(name=name, age=age) 
     self._info = None 

    @property 
    def info(self): 
     return self._info 

    @info.setter 
    def info(self, value): 
     # you likely want to it here 
     self._info = value 
     print("this is being set") 


c = Truck() 
c.info = "great" 
print(c.info) 

Это печатает:

this is being set 
great 
Смежные вопросы