向函数传递数据描述符

2024-04-20 11:43:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把一个数据描述符对象传递给一个函数。相反,传递__get__()的结果。你知道吗

数据描述符类:(代码是示例代码)

import time

class evenOdd():
    def __get__(self, obj, owner):
        return "even!" if (time.mktime(time.localtime()) % 2 == 0) else "odd!"


class testObject():
    a = evenOdd()

下面的代码打印“偶数!奇怪!甚至!奇怪!……”地址:

tester = testObject()

for i in range(10):
    print(tester.a, end=" ")
    time.sleep(1)

但是,将for循环放在它自己的函数中会生成“偶数!甚至!甚至!甚至!……”或者“奇怪!奇怪!奇怪!奇怪!……”地址:

def printer(data):
    for i in range(10):
        print(data, end = " ")
        time.sleep(1)

tester = testObject()
printer(tester.a)

如何将数据描述符对象传递给函数,而不是__get__()的结果?你知道吗

编辑:我发现了一个基于jornsharpes响应的解决方法,它有点像我想要的那样:

def printer(data):
    for i in range(10):
        print(data(), end = " ")
        time.sleep(1)

tester = testObject()
printer(lambda: tester.a)

不幸的是,这意味着printer()不再适用于字符串。如果可能的话,我想printer()接受我的数据描述符对象和常规字符串。你知道吗


Tags: 数据对象函数代码infordataget
1条回答
网友
1楼 · 发布于 2024-04-20 11:43:10

使用jornsharpe和L3viathans的响应,我编写了以下代码,完全满足了我的需要:

tester = testObject()

def printer(data):
    isCallable = isinstance(data, collections.abc.Callable)
    for _ in range(10):
        print(data() if isCallable else data, end = " ")
        time.sleep(1)

tester = testObject()
printer(lambda: tester.a)
print("")
printer("test")

这将产生:

odd! even! odd! even! odd! even! odd! even! odd! even!
test test test test test test test test test test

谢谢你的帮助!你知道吗

相关问题 更多 >