如何使用列表项的名称创建函数,

How to create functions with a name of the list item,

在 kivy 应用程序中,它在启动时收到一个 json 值,将它们分配给一个变量并将它们附加到一个列表中。在每次应用程序启动时,它都会收到不同的值,因此列表总是不同的。

Ch1_name = channel.json()['items']['channels'][0]['channelName']
Ch2_name = channel.json()['items']['channels'][1]['channelName']
Ch3_name = channel.json()['items']['channels'][2]['channelName']
Ch4_name = channel.json()['items']['channels'][3]['channelName']

channels = []

channels.append(Ch1_name)
channels.append(Ch2_name)
channels.append(Ch3_name)
channels.append(Ch4_name)

print(channels)
['cnn','fox','sky sports','fsc']

问题: 我需要为每个频道创建函数,这将保留一个列表项的名称,它是一个频道名称。类似于:

def cnn()
    print('this function was named cnn just like an item list')

也许 class 有不同的方法?谢谢你的任何想法。

for channel_name in channels:
  exec(f"""
def {channel_name}():
  print(f'this function was named {channel_name} just like an item list')
"""
  )

您可以进行一些元编程以动态添加函数。这是一些示例代码,它使用 setattr 根据频道名称在 class 上设置函数。

class ChannelPrinter:
    pass

channel_printer = ChannelPrinter()

for channel in ['cnn', 'fox', 'sky sports', 'fsc']:
    def make_func(name):
        def print_channel_info():
            print('this function was named {} just like an item list'.format(name))
        return print_channel_info

    setattr(channel_printer, channel, make_func(name=channel))

> channel_printer.cnn()
this function was named cnn just like an item list
> channel_printer.fox()
this function was named fox just like an item list