liliya 发表于 2020-5-3 16:36:34

在类的定义中引入模块好像不能用

import time as t#引用模块写在里面不能用,相当于只存储起来,需要放在外面
class Record:
   #引入时间模块
    def __init__(self,value,variable_name):
      self.value=value#操作的值
      self.variable_name=variable_name#操作的变量名(实例化对象的名字)

    def get_clock(self):#获取时间
      return (t.asctime(t.localtime()))

我发现当我把import time 模块放到了类定义的内部之后,好像没有办法调用相应的函数这是为啥呀???{:9_230:}

永恒的蓝色梦想 发表于 2020-5-3 16:45:11

写 Record.函数 或 self.函数 或 cls.函数

liliya 发表于 2020-5-3 16:47:02

永恒的蓝色梦想 发表于 2020-5-3 16:45
写 Record.函数 或 self.函数 或 cls.函数

我写了一下好像还是不行,

liliya 发表于 2020-5-3 16:48:21

liliya 发表于 2020-5-3 16:47
我写了一下好像还是不行,

为啥必须要放在外面啊,不是特别懂

永恒的蓝色梦想 发表于 2020-5-3 16:52:19

liliya 发表于 2020-5-3 16:48
为啥必须要放在外面啊,不是特别懂

代码发上来

liliya 发表于 2020-5-3 17:11:12

永恒的蓝色梦想 发表于 2020-5-3 16:52
代码发上来

import time as t#引用模块写在里面不能用,相当于只存储起来,需要放在外面
class Record:
   #引入时间模块
    def __init__(self,value,variable_name):
      self.value=value#操作的值
      self.variable_name=variable_name#操作的变量名(实例化对象的名字)
      self.data='{} 变量于北京时间 {} 被创建,{}={}'.format(self.variable_name,self.get_clock(),self.variable_name,self.value)
      with open('C:\\Users\\Liliya\\Desktop\\record.txt','a') as f :
            f.write(self.data+'\n')

    def get_clock(self):#获取时间
      return (t.asctime(t.localtime()))

    def __get__(self,instance,owner):
      self.data='{} 变量于北京时间 {} 被读取,{}={}'.format(self.variable_name,self.get_clock(),self.variable_name,self.value)
      with open('C:\\Users\\Liliya\\Desktop\\record.txt','a') as f :
            f.write(self.data+'\n')
      return self.value
    def __set__(self,instance,value):
      self.value=value
      self.data='{} 变量于北京时间 {} 被修改,{}={}'.format(self.variable_name,self.get_clock(),self.variable_name,self.value)
      with open('C:\\Users\\Liliya\\Desktop\\record.txt','a') as f :
            f.write(self.data+'\n')
    def __delete__(self,instance):
      del self.value
      self.data='{} 变量于北京时间 {} 被删除'.format(self.variable_name,self.get_clock())
      with open('C:\\Users\\Liliya\\Desktop\\record.txt','a') as f :
            f.write(self.data+'\n')

#主程序
class Test:
      x = Record(10, 'x')
      y = Record(8.8, 'y')
test = Test()
print(test.x)
print(test.y)
test.x = 123
test.x = 1.23
test.x = 'hello world'

_荟桐_ 发表于 2020-5-3 17:39:02

class A():
    import os
    global os
a = A()
print(os.getcwd())
刚刚试了一下,应该是像函数一样要global吧

liliya 发表于 2020-5-3 17:45:18

_荟桐_ 发表于 2020-5-3 17:39
刚刚试了一下,应该是像函数一样要global吧

刚试了一下,你说的对的,不过不太明白为什么,在类定义里面的话不是相当于一个类的属性了吗?

_荟桐_ 发表于 2020-5-3 17:49:22

liliya 发表于 2020-5-3 17:45
刚试了一下,你说的对的,不过不太明白为什么,在类定义里面的话不是相当于一个类的属性了吗?

一个类的属性是类属性,就要用类名或实例名+属性名访问
或者直接global也行

hrp 发表于 2020-5-3 18:11:08

试试这样??
class Record:
   #引入时间模块
    import time as t
    def __init__(self,value,variable_name):
      self.value=value#操作的值
      self.variable_name=variable_name#操作的变量名(实例化对象的名字)

    def get_clock(self):#获取时间
      return (self.t.asctime(self.t.localtime()))

_2_ 发表于 2020-5-3 19:11:53

本帖最后由 _2_ 于 2020-5-3 19:12 编辑

liliya 发表于 2020-5-3 17:45
刚试了一下,你说的对的,不过不太明白为什么,在类定义里面的话不是相当于一个类的属性了吗?

你可以试试这样:
class A:
    def __init__(self):
      self.lib = __import__("time")

类操作一定要加上 self, 否则就无法调用

zltzlt 发表于 2020-5-3 20:28:36

把代码中的 t. 改为 self.t. ,因为 t 放在类里面就是属于类属性
页: [1]
查看完整版本: 在类的定义中引入模块好像不能用