驻火蚁 发表于 2017-10-5 19:42:39

46讲的动动手第一题修改记录问题

为什么仅记录对 x,y的修改和读取?而对于另外添加的z不记录呢?
>>> class Test:
      x = Record(10,'x')
      y = Record(8.8,'y')

      
>>> test = Test()
>>> test.x
10
>>> test.x =1
>>> test.x
1
>>> test.z = 'sun'
>>> test.z
'sun'
>>> test.y = 'sun'
>>> test.y
'sun'

x 变量于北京时间 Thu Oct5 19:34:01 2017 被读取,x = 10
x 变量于北京时间 Thu Oct5 19:34:10 2017 被修改, x = 1
x 变量于北京时间 Thu Oct5 19:34:12 2017 被读取,x = 1
x 变量于北京时间 Thu Oct5 19:34:37 2017 被读取,x = 10
x 变量于北京时间 Thu Oct5 19:34:39 2017 被修改, x = 1
x 变量于北京时间 Thu Oct5 19:34:42 2017 被读取,x = 1
y 变量于北京时间 Thu Oct5 19:35:01 2017 被修改, y = sun
y 变量于北京时间 Thu Oct5 19:35:07 2017 被读取,y = sun

新手·ing 发表于 2017-10-5 21:11:15

就看你的代码来说
修改哪个应该是看心情

驻火蚁 发表于 2017-10-5 21:20:41

新手·ing 发表于 2017-10-5 21:11
就看你的代码来说
修改哪个应该是看心情

x,y还是按照要求来的,这只是运行的代码,程序代码就是小甲鱼给出的

新手·ing 发表于 2017-10-5 21:25:17

驻火蚁 发表于 2017-10-5 21:20
x,y还是按照要求来的,这只是运行的代码,程序代码就是小甲鱼给出的

没有需求,改哪个都行

新手·ing 发表于 2017-10-5 21:25:28

驻火蚁 发表于 2017-10-5 21:20
x,y还是按照要求来的,这只是运行的代码,程序代码就是小甲鱼给出的

把代码发上来

驻火蚁 发表于 2017-10-6 09:21:47

新手·ing 发表于 2017-10-5 21:25
把代码发上来

import time

class Record:
    def __init__(self, initval=None, name=None):
      self.val = initval
      self.name = name
      self.filename = "record.txt"

    def __get__(self, instance, owner):
      with open(self.filename, 'a', encoding='utf-8') as f:
            f.write("%s 变量于北京时间 %s 被读取,%s = %s\n" % \
                  (self.name, time.ctime(), self.name, str(self.val)))
      return self.val

    def __set__(self, instance, value):
      filename = "%s_record.txt" % self.name
      with open(self.filename, 'a', encoding='utf-8') as f:
            f.write("%s 变量于北京时间 %s 被修改, %s = %s\n" % \
                  (self.name, time.ctime(), self.name, str(value)))
      self.val = value

驻火蚁 发表于 2017-10-6 09:24:51

新手·ing 发表于 2017-10-5 21:25
把代码发上来

为什么test.z在Test类里面没有实例化,还照样可以test.z = 'sun',并且可以删除呢?

新手·ing 发表于 2017-10-6 09:26:22

驻火蚁 发表于 2017-10-6 09:21


等下

新手·ing 发表于 2017-10-6 09:28:17

你只是给了个z
但是并没有实例化

驻火蚁 发表于 2017-10-6 09:30:31

新手·ing 发表于 2017-10-6 09:28
你只是给了个z
但是并没有实例化

那为什么照样还可以给z赋值,然后读取,删除z这个属性呢?

新手·ing 发表于 2017-10-6 09:35:10

驻火蚁 发表于 2017-10-6 09:30
那为什么照样还可以给z赋值,然后读取,删除z这个属性呢?

下面没有显示z被修改被读取吧

新手·ing 发表于 2017-10-6 09:35:32

驻火蚁 发表于 2017-10-6 09:30
那为什么照样还可以给z赋值,然后读取,删除z这个属性呢?

这个是本身就可以的把

驻火蚁 发表于 2017-10-6 10:04:36

新手·ing 发表于 2017-10-6 09:35
这个是本身就可以的把

傻了,傻了{:5_95:} 多谢
页: [1]
查看完整版本: 46讲的动动手第一题修改记录问题