鱼C论坛

 找回密码
 立即注册
查看: 770|回复: 6

[已解决]第46讲描述符课后题T1 无法成功调用__set__()

[复制链接]
发表于 2020-5-28 13:37:04 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Tigeroad 于 2020-5-28 13:37 编辑

题目:1. 按要求编写描述符 :记录指定变量的读取和写入操作,并将记录以及触发时间保存到文件:record.txt。

在看小甲鱼老师的答案之前,我的代码是这么写的:
import time as t
class Record:
    def __init__(self, value, name):
        self.name = name
        self.value = value

    def __get__(self, instance, owner):#__get__可以成功调用
        print('getting...')#测试。__get__可以成功调用
        time = t.localtime()

        #写入文档,用的甲鱼老师课上讲的那个函数,代码有点蠢萌。。
        f = open('record.txt', 'a')
        temp = (self.name + '变量于北京时间 ')
        
        for i in range(6):
            temp += (str(time[i]) + ' ')

        temp += ('被读取, ' + self.name + ' = ' + str(self.value) + ' \n')
        f.writelines(temp)
        f.close()
        
        return self.value

   #以下无法调用,求解
    def __set__(self, instance, value):
        print('setting.....')#测试。__set__无法调用
        time = t.localtime()

        #写入文档,用的甲鱼老师课上讲的那个函数,代码有点蠢萌。。
        f = open('record.txt', 'a')
        temp = (self.name + '变量于北京时间 ')
        for i in range(6):
            temp += (str(time[i]) + ' ')
        temp += ('被修改, ' + self.name + ' = ' + str(self.value) + ' \n')
        f.writelines(temp)
        f.close()
        
        self.value = value

class Test:
    x = Record(10, 'x')
    y = Record(8.8, 'y')

test = Test
运行之后IDLE显示如下:
>>> test.x
getting...
10
>>> test.y
getting...
8.8
>>> test.x = 123
>>> test.y = 234
>>> test.y = 'i love you!'
也就是__get__方法成功调用了, __set__方法没有调用,在record.txt文档中也是同样的结果,只有这两行:
x变量于北京时间 2020 5 28 13 26 59 被读取, x = 10
y变量于北京时间 2020 5 28 13 27 3 被读取, y = 8.8


想了一天了还是不知道哪里出了问题,请问大家哪里出了问题呢?非常感谢!
最佳答案
2020-5-28 13:41:36
test = Test()


加上括号....粗心boy
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-28 13:41:36 | 显示全部楼层    本楼为最佳答案   
test = Test()


加上括号....粗心boy
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 13:58:17 | 显示全部楼层
本帖最后由 heidern0612 于 2020-5-28 14:00 编辑

待编辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-28 13:58:52 | 显示全部楼层
Twilight6 发表于 2020-5-28 13:41
加上括号....粗心boy

啊。。。是的。。我咋就没看出来呢
非常感谢  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-28 14:04:36 | 显示全部楼层
heidern0612 发表于 2020-5-28 13:58
你少定义一个self属性,record应该等于其中一个类实参,这样才能直接操作下面文件。

不然都是在类定义阶 ...

楼上说的对,我少了一个括号,加上以后就可以了你说的“少定义self属性”应该也是这个意思吧
谢谢:)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 14:08:09 | 显示全部楼层
Tigeroad 发表于 2020-5-28 14:04
楼上说的对,我少了一个括号,加上以后就可以了你说的“少定义self属性”应该也是这个意思吧
...

嗯,我的原意是你应该在init里面定义个self.file,后来发现不定义也成。

ε=(′ο`*)))唉,岁数大了眼花在,字太小看着费劲。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-28 15:31:39 | 显示全部楼层
heidern0612 发表于 2020-5-28 14:08
嗯,我的原意是你应该在init里面定义个self.file,后来发现不定义也成。

ε=(′ο`*)))唉,岁数大了 ...

哈哈 谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 01:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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