相关疑难解决方法(0)

python类属性

我有一个关于python中的类属性的问题.

class base :
    def __init__ (self):
        pass
    derived_val = 1

t1 = base()
t2 = base ()

t2.derived_val +=1
t2.__class__.derived_val +=2
print t2.derived_val             # its value is 2
print t2.__class__.derived_val   # its value is 3
Run Code Online (Sandbox Code Playgroud)

结果不同.我还使用id()函数来查找t2.derived_val和t2.class .derived_val有不同的内存地址.我的问题是derived_val是class属性.为什么上面的例子有所不同?是因为类的实例在类属性旁边复制了自己的derived_val吗?

python attributes class

17
推荐指数
1
解决办法
2万
查看次数

在asyncio中链接协程(和观察者模式)

我无法将协同程序链接在一起.在一个比hello world或factorial稍微不那么简单的例子中,我想要一个循环来持续监视文件修改时间,然后在触摸文件时打印出时间:

#!/usr/bin/env python3
import os
import asyncio

@asyncio.coroutine
def pathmonitor(path):
    modtime = os.path.getmtime(path)
    while True:
        new_time = os.path.getmtime(path)
        if new_time != modtime:
            modtime = new_time
            yield modtime
        yield from asyncio.sleep(1)

@asyncio.coroutine
def printer():
    while True:
        modtime = yield from pathmonitor('/home/users/gnr/tempfile')
        print(modtime)

loop = asyncio.get_event_loop()
loop.run_until_complete(printer())
loop.run_forever()
Run Code Online (Sandbox Code Playgroud)

我希望这可以工作 - 但是,当我运行它时,我得到一个:

RuntimeError: Task got bad yield: 1426449327.2590399
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

更新:请参阅下面的答案,了解观察者模式的示例(即,在文件被触摸时有效地允许多个注册者获得更新),而不使用回调(您必须使用任务).

UPDATE2:有一个更好的解决方案:3.5 async for(异步迭代器):https://www.python.org/dev/peps/pep-0492/

python python-3.x python-asyncio

9
推荐指数
1
解决办法
3727
查看次数

标签 统计

python ×2

attributes ×1

class ×1

python-3.x ×1

python-asyncio ×1