Python 在当前类的循环中调用另一个类函数
我有两类表情符号和表情符号。 我想通过EmojiRun调用Emoji类函数,使用无限循环Python 在当前类的循环中调用另一个类函数,python,python-3.x,function,for-loop,iterator,Python,Python 3.x,Function,For Loop,Iterator,我有两类表情符号和表情符号。 我想通过EmojiRun调用Emoji类函数,使用无限循环 class Emoji: def __init__(self): self.green = (0, 255, 0) self.yellow = (255, 255, 0) self.blue = (0, 0, 255) self.red = (255, 0, 0) self.white = (255, 255, 255)
class Emoji:
def __init__(self):
self.green = (0, 255, 0)
self.yellow = (255, 255, 0)
self.blue = (0, 0, 255)
self.red = (255, 0, 0)
self.white = (255, 255, 255)
self.nothing = (0, 0, 0)
self.brown = (165, 42, 42)
def face(self):
return face
def smile(self):
return smile
def sad(self):
return sad
在我的EmojiRun类中,我需要调用函数face
,smile
,sad
。
我可以单独调用它,但是我想知道是否有一种方法可以迭代类Emoji的函数,就像下面的例子一样,我知道它是错误的
#Main class to run Emoji
from animatedEmoji import Emoji
from sense_hat import SenseHat
from time import sleep
#Class instance emoji
emoji = Emoji()
sense = SenseHat()
while True:
#Forloop to call emoji functions 1 by 1
for x in Emoji:
sense.set_pixels(emoji.function[x])
sleep(3)
你可以试试看下面的方法是否有效
>>> for k,v in Emoji.__dict__.items():
... if "function" in str(v):
... print(k)
...
sad
smile
face
__init__
您可以添加一个函数,该函数提供
Emoji
支持的所有表达式:
class Emoji:
... // same code as before
def expressions(self):
yield self.face
yield self.smile
yield self.sad
然后,您可以使用以下命令来调用它:
e = Emoji()
for exp in e.expressions():
sense.set_pixels(exp())
sleep(3)
与其提供绑定成员函数,还不如调用它们并产生结果
只要只有少量表达式,这种方法就可以工作。一旦有了许多表达式,维护expressions()
函数就会变得很麻烦。当您有派生类时,情况更是如此。在这种情况下,我建议您研究两种替代方法:
- 内省。基本上,这意味着您可以扫描对象以查找方法,例如,不获取任何参数(除了
)并返回表达式。这可能需要函数上的返回类型注释self
- 注册表达式。阅读decorators文档,它允许您编写一个维护每种类型的表达式函数列表的decorator。您只需在函数声明前面加上
@expression\u函数
{face:face(function face),smile:smile,sad:sad}
,然后调用这个函数,这个函数返回dict,对它进行迭代,并以循环的方式调用函数,这样做有帮助吗?为什么你的函数sad
返回sad
?如果你的emoji类至少可以编译,那么它会有帮助,当前的方式需要猜测,这总是不好的。它可以工作,但我不需要init,否则我的驱动程序会崩溃。(y)