git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

property


Hello,

I am wondering why this code is OK:

class Temperature:
     def __init__(self):
	self.celsius = 0

     fahrenheit = property()
	
     @fahrenheit.getter
     def fahrenheit(self):
	return 9/5*self.celsius +32
	
     @fahrenheit.setter
     def fahrenheit(self, value):
	self.celsius = (value-32)*5/9


and this one is not:


class Temperature:
     def __init__(self):
	self.celsius = 0

     fahrenheit = property()
	
     @fahrenheit.getter
     def f(self):
	return 9/5*self.celsius +32
	
     @fahrenheit.setter
     def f(self, value):
	self.celsius = (value-32)*5/9

In the second code, I just changed the names of the
decorated functions

Unforunately I was not able to find "property" source
code to understand how it works exactly

I wrote a my_property which makes the two previous codes
to work fine. This is why I don't understand why the
genuine property does't work when decorated functions
are named f rather than fahrenheit

Here it is:

class my_property:

     def __init__(self, fget=None, fset=None, fdel=None):
         self.fget = fget
         self.fset = fset
         self.fdel = fdel

     def __get__(self, instance, owner):
         if instance is None:
             return self
         return self.fget(instance)

     def __set__(self, instance, value):
         self.fset(instance, value)

     def __delete__(self, instance):
         self.fdel(instance)

     def getter(self, fget):
         self.fget = fget
         return self

     def setter(self, fset):
         self.fset = fset
         return self

     def deleter(self, fdel):
         self.fdel = fdel
         return self