推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
xiaolinjia
V2EX  ›  Python

请教个 Python 不同 py 文件中的类获取另一个类实例变量的问题

  •  
  •   xiaolinjia · Jan 17, 2020 · 3067 views
    This topic created in 2334 days ago, the information mentioned may be changed or developed.

    标题感觉取的怪怪的,所以还是用代码举个例子吧。

    目前有三个 py 文件,当然这里简化了。其中 test2.py 是第三方库的。

    test1.py :

    import threading
    from test2 import A
    
    testA = A(1)
    
    
    class B:
        def __init__(self):
            self._lock = threading.Lock()
    
        def do_something_1(self):
    
            def callback():
                pass
    
            testA.do_something(callback)
    
    
    

    test2.py

    class A:
        def __init__(self, param1):
            self.a = param1
            # 初始化很多东西,加载些模型
    
        def do_something(self, callback_func):
            while True:
                # 想在 reading 之前,获取到 test1.py 中实例的锁,这个可以做到吗
                # reading
                callback_func()
    
    

    test3.py

    from flask import Flask, jsonify
    from test1 import B
    
    app = Flask(__name__)
    
    
    @app.route('/xxx/')
    def test1():
        b = B()
        b.start()
        return jsonify({'msg': 'b has started.'})
    
    
    if __name__ == '__main__':
        app.run()
    

    然后现在想在 test2.py 中的 reading 前获取到 B 类的实例中的 lock 成员,或者其他成员,这个要怎么做到啊,我想半天都不知道要怎么才获取的到,用 globals()和 locals()看了都没有。。

    2 replies    2020-01-17 12:53:50 +08:00
    xiaolinjia
        1
    xiaolinjia  
    OP
       Jan 17, 2020
    之前想到的一个方法是,继承下第三方库的 A 类,然后重载下 do_something 方法,增加多一个参数比如 before。
    然后在 B 类的 do_something1()中,testA.do_something(callback, before=self)。这样就能在 A 类的 do_something()中获取到 A 实例的成员的值,不过个人感觉不太优雅。就当抛砖引玉吧
    bigNewsMaker
        2
    bigNewsMaker  
       Jan 17, 2020
    能把 A 类定义为继承 B 类吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1129 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 23:06 · PVG 07:06 · LAX 16:06 · JFK 19:06
    ♥ Do have faith in what you're doing.