如果类定义了初始化之后是否需要返回

来源:4-12 python中的with语句

慕雪3436312

2021-10-22

class Sample:
    def __enter__(self):
        print(f'{self.name}入口')

    def __exit__(self, exc_type, exc_val, exc_tb):
        print(f'{self.name}出口')

    def __init__(self, name):
        self.name = name

    def do_something(self):
        print(f'{self.name}工作中')


with Sample(name='我是1') as s:
    s.do_something()

出现了一下错误
Traceback (most recent call last):
File “with_test.py”, line 36, in
s.do_something()
AttributeError: ‘NoneType’ object has no attribute ‘do_something’

Process finished with exit code 1

写回答

1回答

bobby

2021-10-23

是的,你要在enter中 return self 如下:

class Sample:
    def __enter__(self):
        print(f'{self.name}入口')
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print(f'{self.name}出口')

    def __init__(self, name):
        self.name = name

    def do_something(self):
        print(f'{self.name}工作中')


with Sample(name='我是1') as s:
    s.do_something()


0
0

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程