鱼C论坛

 找回密码
 立即注册
查看: 1310|回复: 3

关于46课描述符的一个问题,希望大佬指点一下

[复制链接]
发表于 2018-2-1 16:11:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 天圆突破 于 2018-2-1 16:14 编辑

46课学完后,跟着小甲鱼老师的思路也把课后习题做了,但是产生了一个疑问。

在课上和课后习题的一贯思路,都是把参数放到描述符类里面处理的,而目标类都是当成了用来“测试”描述符的一个空架子类

那么如果我有一个在正常工作的目标类,所有参数都需要放在目标类里面,而且目标类里还有很多函数需要随时调用这些参数。那么这种情况下,描述符该怎么写?

比如描述符里面的__get__(self, instance, owner),如果要把一个计算放到__get__里面(比如课上的华氏摄氏转换),那么就必须的return一个描述符里面才存在的参数,那我这个参数要是放在目标类里面该怎么办?

就像property那样,要return一个函数回去的时候,但同时要对这个get到的结果做一些偷鸡摸狗的事情,要怎么做?

(不知道描述的清不清楚,表达能力有点欠佳,望海涵。)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-1 19:24:43 | 显示全部楼层
我没看过小甲鱼的课程 也不太明白你的描述
按照我的习惯给你写了个
  1. class Sheshidu():
  2.     def __init__(self,value=0.0):
  3.         self.value = float(value)
  4.     def __get__(self,instance,owner):
  5.         return self.value
  6.     def __set__(self,instance,value):
  7.         self.value = float(value)

  8. class Huashidu():
  9.     def __get__(self,instance,owner):
  10.         return 32+instance.degree*1.8
  11.     def __set__(self,instance,value):
  12.         instance.degree = (float(value) - 32) / 1.8

  13. class Temperature():
  14.     degree = Sheshidu()
  15.     fdegree = Huashidu()

  16. t = Temperature()
  17. print(t.degree,t.fdegree)
  18. t.degree = 1
  19. print(t.degree,t.fdegree)
  20. t.fdegree = 150
  21. print(t.degree,t.fdegree)

  22. # result
  23. 0.0 32.0
  24. 1.0 33.8
  25. 65.55555555555556 150.0
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-2 08:34:00 | 显示全部楼层
本帖最后由 天圆突破 于 2018-2-2 08:35 编辑
yjsx86 发表于 2018-2-1 19:24
我没看过小甲鱼的课程 也不太明白你的描述
按照我的习惯给你写了个


感谢大佬回复,看来高手的思路都是一样的啊。
而这也正是我所疑惑的。

在您写的这个例子里,Huashidu和Sheshidu是描述符类,Temperature是目标类。

和小甲鱼老师的思路一样,参数的传递是放在描述符类里面。

但是如果我要主要工作的类是Temperature,我需要把温度这个参数放到Temperature里面,在这个类里面我还有很多很多别的方法要用到这个参数,而两个描述符只是我用来方便进行get和set用的,那这种情况应该怎么写?

我试过property那种形式,但是在property的描述符类里面,__get__方法return回去的是一个函数,没有办法在里面进行计算(转换计算)。

那就这个例子我想描述一下我的“需求”:

1. 温度参数存储在Temperature里面
2. 可以通过描述符类Huashidu和Sheshidu对类Temperature里的温度进行访问和设置,并可以在访问的时候自由转换。

能不能在Temperature里不添加转换方法的前提下完成这个需求呢?(也就是说转换放在描述符类里进行)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-2 10:47:25 | 显示全部楼层
可是可以 比较麻烦还不如直接在目标类里写
你需要在目标类建立2个属性 一个是温度属性 还有一个是状态属性标示现在这个温度是摄氏度还是华氏度 供描述符根据这个状态做相应的转换
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-27 16:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表