我想将数据描述符对象传递给函数。而是传递__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循环置于其自己的函数中会生成“ even!even!even!even!...”或“ odd!奇数!奇数!奇数!...”:
def printer(data):
for i in range(10):
print(data, end = " ")
time.sleep(1)
tester = testObject()
printer(tester.a)
如何将数据描述符对象而不是__get__()
的结果传递给函数?
编辑:我发现了一种基于jonrsharpes响应的解决方法,其中 可以满足我的要求:
def printer(data):
for i in range(10):
print(data(), end = " ")
time.sleep(1)
tester = testObject()
printer(lambda: tester.a)
不幸的是,这意味着printer()
不再适用于字符串。如果可能的话,我希望printer()
接受我的数据描述符对象以及常规字符串。
答案 0 :(得分:0)
使用jonrsharpe和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
感谢您的帮助!