복붙노트

[PYTHON] 파이썬 : 클래스 이름을 함수의 매개 변수로 전달 하시겠습니까?

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 (Subscriber.all (). fetch 문)는 클래스 이름으로, Google BigTable에서 Python으로 데이터 테이블을 정의하는 방법입니다.

나는 이런 식으로하고 싶다.

       TestRetrievalOfClass(Subscriber)  
or     TestRetrievalOfClass("Subscriber")  

감사, 닐 월터스

해결법

  1. ==============================

    1.

    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)  
    
  2. ==============================

    2."this like"와 "or"사이의 코드처럼 클래스 객체를 직접 전달하면, 그 이름을 __name__ 속성으로 사용할 수 있습니다.

    "this like"와 "or"사이의 코드처럼 클래스 객체를 직접 전달하면, 그 이름을 __name__ 속성으로 사용할 수 있습니다.

    ( "또는"뒤에 코드에서와 같이) 이름으로 시작하면 클래스 객체가 어디에 포함될 수 있는지에 대한 표시가없는 한 클래스 객체를 검색하기가 정말 어려워집니다 (모호하지 않음). 그래서 클래스 객체를 전달하지 않는 이유는 무엇입니까? 대신?!

  3. ==============================

    3.내가 사용한 Ned 코드의 약간의 변형. 이 웹 응용 프로그램, 그래서 http : // localhost : 8080 / TestSpeedRetrieval을 통해 get 루틴을 실행하여 시작합니다. 나는 init의 필요성을 보지 못했다.

    내가 사용한 Ned 코드의 약간의 변형. 이 웹 응용 프로그램, 그래서 http : // localhost : 8080 / TestSpeedRetrieval을 통해 get 루틴을 실행하여 시작합니다. 나는 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
    
  4. from https://stackoverflow.com/questions/1436444/python-passing-a-class-name-as-a-parameter-to-a-function by cc-by-sa and MIT license