使用类似生成器的静态方法

时间:2019-01-25 04:02:06

标签: python-3.x oop generator

我有一个列表,其中填充了类的实例,因此我想对每个元素应用不同的方法,而无需定义用于应用每个方法的循环。如何正确执行?

我创建了一个类,并将对象的属性定义为填充有数据的字典,然后使用类方法将对象存储在列表中。我找到了一种使用静态方法将方法应用于每个对象的方法,该方法从列表中“提取”每个对象,然后将该方法应用于每个对象(列表元素)。事实是,我创建了两个方法(静态方法和实例方法)来执行此操作,并且需要应用更多方法,但是我想重新利用第一个静态方法。最初,我在static内部调用了实例方法...但是,对于每个实例方法使用相同的解决方案,它将变得多余。因此,我发现像生成器一样编写静态方法会有所帮助。让我告诉你。

锻炼目标:从用户输入中捕获飞行数据。

    class Flight:
        def __init__(self,flightdata):
            self.flightdata = flightdata

        @classmethod
        def fcreator(cls,x,flightRecord =[]):
            for j in range(x):
                data_descriptor = ['key1','key2']
                data_filler = []
                print(f'\nWrite flight info {j+1}:\n')

                for i in range(len(data_descriptor)):
                    info = input(f"Type {data_descriptor[i]}: ")
                    data_filler.append(info)

                flight_dict = dict(zip(data_descriptor,data_filler))
                fdata = Flight(flight_dict)
                flightRecord.append(fdata)
            return flightRecord

        def displayInfo(self,element):
            for self in Flight.extractObject(element):
                for k,v in self.flightdata.items():
                    print('\t'+k +': ',self.flightdata[k]+'\n')

        @staticmethod
        def extractObject(element): # Generador
            for i in range(len(element)):
                print(f'\nFlight {i+1}:')
                yield element[i]


    n= int(input('Number of objects to create: '))

    obj = Flight.fcreator(n)
    print(type(obj[0]))
    print(obj)
这行使我感到不舒服,因为我不知道该方法是将生成的每个元素“ Flight.extractObject(obj)”识别为实例(自身)还是将其作为参数。我必须以“异常”的方式应用实例方法,以便它可以工作。
Flight.displayInfo(Flight.extractObject(obj),obj)

根据上述想法,我可以定义所需的其他方法,并从静态方法中获取生成的元素并执行所需的操作。你怎么看? 非常感谢您的帮助。谢谢。

0 个答案:

没有答案