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__()
?
编辑:我找到了一种基于 jonrsharpes 响应的解决方法,它可以满足我的要求:
def printer(data):
for i in range(10):
print(data(), end = " ")
time.sleep(1)
tester = testObject()
printer(lambda: tester.a)
不幸的是,这意味着printer()
不再适用于字符串。如果可能的话,我想printer()
接受我的数据描述符对象以及常规字符串。
解决方案
使用 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
谢谢您的帮助!
推荐阅读
- node.js - StatusCodeError: [not_x_content_exception] 只能在某些 xcontent 字节或压缩的 xcontent 字节上调用压缩器检测
- excel - 循环到最后一行
- python - 可以设置“ufuncify”功能来接受复杂的输入吗?“输入类型不支持 ufunc 'wrapper_module_0'”错误
- spring - Spring Integration:如何对轮询建议进行单元测试
- powerbi - PowerBI Web Embed 有混合刷新数据
- asp.net-core-signalr - 仅向连接到 SignalR 中 2 个不同集线器的特定组中的特定用户发送消息
- c - 如何在 C 中返回具有动态多维数组的结构?
- reactjs - 多次重新渲染会破坏 CSS 过渡
- python - pygame中的一个掩码碰撞检测问题
- android - 我想更改 Android 上的 GifImageView 位置