Python: передача имени класса в качестве параметра функции?

class TestSpeedRetrieval(webapp.RequestHandler): """ Test retrieval times of various important records in the BigTable database """ def get(self): commandValidated = True beginTime = time() itemList = Subscriber.all().fetch(1000) for item in itemList: pass endTime = time() self.response.out.write("<br/>Subscribers count=" + str(len(itemList)) + " Duration=" + duration(beginTime,endTime)) 

Как я могу превратить приведенное выше в функцию, где я передаю имя класса? В приведенном выше примере Subscriber – это имя класса.

Я хочу сделать что-то вроде этого:

  • Как получить имя функции в виде строки в Python?
  • Python передает целое число по ссылке
  • Функции фабрики python по сравнению с классом
  • Как использовать пользовательский ввод для вызова функции в Python?
  • Создание функций в цикле
  • функция не определена ошибка в Python
  •   TestRetrievalOfClass(Subscriber) or TestRetrievalOfClass("Subscriber") 

    Спасибо, Нил Уолтерс

  • Parsing datetime в Python ..?
  • Komodo - просматривать переменные и выполнять код во время паузы в программе
  • О префиксе char b в клиенте Python3.4.1 подключиться к redis
  • Как встроить видео через mpylayer в кадр QWidget?
  • как получить имя производного класса из базового класса
  • Вход в pygame для Mac OS X отправляется в Terminal вместо Python
  • 3 Solutions collect form web for “Python: передача имени класса в качестве параметра функции?”

     class TestSpeedRetrieval(webapp.RequestHandler): """ Test retrieval times of various important records in the BigTable database """ def __init__(self, cls): self.cls = cls def get(self): commandValidated = True beginTime = time() itemList = self.cls.all().fetch(1000) for item in itemList: pass endTime = time() self.response.out.write("<br/>%s count=%d Duration=%s" % (self.cls.__name__, len(itemList), duration(beginTime,endTime)) TestRetrievalOfClass(Subscriber) 

    Если вы передаете объект класса напрямую, как в вашем коде между «like this» и «or», вы можете получить его имя как атрибут __name__ .

    Начиная с имени (как в вашем коде после «или») делает его ДЕЙСТВИТЕЛЬНО твердым (и недвусмысленным) для извлечения объекта класса, если у вас нет некоторых указаний о том, где объект класса может содержаться – так почему бы не передать объект класса вместо?!

    Небольшая вариация кода Неда, который я использовал. Это веб-приложение, поэтому я запускаю его, запустив процедуру get через URL-адрес: http: // localhost: 8080 / TestSpeedRetrieval . Я не видел необходимости init .

     class TestSpeedRetrieval(webapp.RequestHandler): """ Test retrieval times of various important records in the BigTable database """ def speedTestForRecordType(self, recordTypeClassname): beginTime = time() itemList = recordTypeClassname.all().fetch(1000) for item in itemList: pass # just because we almost always loop through the records to put them somewhere endTime = time() self.response.out.write("<br/>%s count=%d Duration=%s" % (recordTypeClassname.__name__, len(itemList), duration(beginTime,endTime))) def get(self): self.speedTestForRecordType(Subscriber) self.speedTestForRecordType(_AppEngineUtilities_SessionData) self.speedTestForRecordType(CustomLog) 

    Вывод:

     Subscriber count=11 Duration=0:2 _AppEngineUtilities_SessionData count=14 Duration=0:1 CustomLog count=5 Duration=0:2 
    Python - лучший язык программирования в мире.