проблема с python3 при вызове свойства BIF - PullRequest
0 голосов
/ 15 апреля 2019

У меня возникла проблема с возвращением значения в классе.

 class Student:
    def __init__(self, name):
    self.name = name
    self.intro = "my name is " + self.name

st = Student("cheng")

print(st.name)
print(self.intro)

st.name = 'xiaoyu'
print(st.name)
print(self.intro)

Выход:

cheng
my name is cheng
xiaoyu
my name is cheng       #Q1:why does self.intro not change?

А затем создайте метод класса для возврата переменной self.intro, он работает следующим образом:

class Student:
    ...
    #self.intro = 'my name is ' + self.name

    def intro(self):
        return 'my name is ' + self.name
    ... 

Кроме того, я также встречаю запутанный пример со свойством BIF decoator.

class Celsius:
    def __init__(self, temperature = 0):
        self.temperature = temperature

    def to_fahrenheit(self):
        return (self.temperature * 1.8) + 32

    def get_temperature(self):
        print("Getting value")
        return self._temperature

    def set_temperature(self, value):
        if value < -273:
            raise ValueError("Temperature below -273 is not possible")
        print("Setting value")
        self._temperature = value

     temperature = property(get_temperature,set_temperature)
     #equal to below code:
     #temperature = property()
     #temperature = temperature.getter(get_temperature)
     #temperature = temperature.setter(set_temperature)

   >>>c = Celsius()
   >>>"Setting value"  

почему там печатается только «Значение настройки», я думаю, что «Получение значения» также должно быть напечатано. Кажется, что когда экземпляр Celsius (), когда выполняются self.tempera = Temperature, он вызывает метод set_teuration, почему?

Я новичок в Python, спасибо за ваше любезное и подробное объяснение.

...