1062195630 发表于 2021-5-18 11:32:10

41节课后作业

class FileObject:
    def __init__(self, filename='sample.txt'):
      self.new_file = open(filename, 'r+')
    def __del__(self):
      self.new_file.close()
      del self.new_file

f=FileObject('re.txt')
for i in f:
    print(i)


Traceback (most recent call last):
File "C:/Users/liu/PycharmProjects/pythonProject1/venv/Scripts/41zuoye0.py", line 12, in <module>
    for i in f:
TypeError: 'FileObject' object is not iterable


这个类该怎么用啊,定义实例对象f后不知道该怎么用了

qq1151985918 发表于 2021-5-18 11:34:38

一样啊,f.read()   f.readlines()这样用

Twilight6 发表于 2021-5-18 12:30:04


你要实际指明需要进行调用的对象,比如此时的 new_file 是被文件对象赋值的变量名,若你需要读取这个对象,就应该通过 类名.实例变量 这样调用

还有就是 __del__ 魔法方法是当你对类对象调用 del 时候才会自动调用 __del__ 魔法方法

参考代码:


class FileObject:
    def __init__(self, filename='sample.txt'):
      self.new_file = open(filename, 'r+')
    def __del__(self):
      self.new_file.close()
      del self.new_file

f=FileObject('re.txt')
# 读取实例属性 new_file
data = f.new_file.read()
for i in data:
    print(i)
   
# 自动调用 __del__ 魔法方法,删除文件对象
del f

1062195630 发表于 2021-5-20 15:24:36

Twilight6 发表于 2021-5-18 12:30
你要实际指明需要进行调用的对象,比如此时的 new_file 是被文件对象赋值的变量名,若你需要读取这个对象 ...

谢谢啊,还有你这串代码第7行什么用啊

Twilight6 发表于 2021-5-20 18:27:00

1062195630 发表于 2021-5-20 15:24
谢谢啊,还有你这串代码第7行什么用啊



销毁这个变量对象,但不对数据本身

1062195630 发表于 2021-5-20 19:11:23

Twilight6 发表于 2021-5-20 18:27
销毁这个变量对象,但不对数据本身

不销毁会有什么后果啊

Twilight6 发表于 2021-5-20 19:32:38

1062195630 发表于 2021-5-20 19:11
不销毁会有什么后果啊



那对该类的实例调用 del 时候就相当于没有调用

1062195630 发表于 2021-5-20 21:25:37

Twilight6 发表于 2021-5-20 19:32
那对该类的实例调用 del 时候就相当于没有调用

懂了懂了,谢谢
页: [1]
查看完整版本: 41节课后作业