Как создать класс с неизвестным количеством экземпляров? - PullRequest
0 голосов
/ 08 июня 2018

Мне нужно создать несколько экземпляров функции def name_VARIABLE_NUMBER(self): под одним class.

Количество экземпляров будет определено из входного файла и неизвестно с самого начала.Можно ли запустить что-то подобное?

NUMBER_of_INSTANCES = 10

class test:
    def instance_1(self):
        print (str(1**3))

    def instance_2(self):
        print (str(2**3))
...
    def instance_10(self):
        print (str(9**3))

Я хочу создать цикл для создания разных имен функций в одном классе с возможностью вызывать их с помощью test.instance_NUMBER.

Что такоелучший вариант создать несколько и неизвестное число def с разными именами внутри класса?

Исходный код можно найти здесь .Это сцены майяви.Они будут прочитаны из входных файлов - значит, количество сцен неизвестно с самого начала.И название для каждой сцены должно быть разным.

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Хотя это возможно сделать с setattr или манипулировать __dict__ класса, но в вашем случае использования, будет ли лучшим вариантом создать одну функцию с параметром?что для меня более понятно.

class test:
    def instance_n(self, n):
        print(str(n**3))
0 голосов
/ 08 июня 2018

Получил рабочий раствор, благодаря Yserbius

NUMBER_of_INSTANCES = 10

class test(object):
    pass

def add_instance(cls,i):
    def instance(self):
        print (str(i**3))
    instance.__doc__ = "docstring for instance%d" % i
    instance.__name__ = "instance%d" % i
    setattr(cls,instance.__name__,instance)

d = test()
for i in range(NUMBER_of_INSTANCES):
    add_instance(test, i)        
    a = str('d.instance'+str(i)+'()')
    exec(a)
0 голосов
/ 08 июня 2018

То, что вы спрашиваете, - это динамическое создание методов во время выполнения, что также является частью того, что задает следующий вопрос.

Создание динамического / динамического метода (генерация кода) в Python

В некотором смысле, метод Python может быть похож на класс с некоторыми определенными атрибутами.Вы можете определить эти атрибуты во время выполнения, используя встроенный метод setattr, который предназначен для установки атрибутов класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...