|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在“零基础入门学习Python”的第46课“描述符”这一节中,小甲鱼写的摄氏度和华氏度转换的案例:
class Celsius:
def __init__(self,value = 26):
self.value = float(value)
def __get__(self,instance,owner):
return self.value
def __set__(self,instance,value):
self.value = value
class Fahrenheit:
def __get__(self,instance,owner):
return instance.cel *1.8 +32
def __set__(self,instance,value):
instance.cel = (float(value)-32)/1.8
class Temperature:
cel = Celsius()
fah = Fahrenheit()
存在的问题是,如果给Temperature两个实例化对象:
t1 = Temperature()
t2 = Temperature()
则对t2的赋值操作会影响t1:
t1.fah = 1
t2.fah = 2
t1.fah
2
原因是,在定义Celsius()的过程中,self指代的是描述符类Celsius()的实例化对象,而t1、t2的Temperature()实例对象也就是instance不同,但Celsius()的实例对象相同,所以self.value = value操作会改变所有Temperature()实例对象的值。
我试图用instance来改写Celsius()类,但没有成功,请大神给我指引,谢谢! |
|