Python: Passing a class name as a parameter to a function?

后端 未结 3 1932
北荒
北荒 2020-12-08 04:27
class TestSpeedRetrieval(webapp.RequestHandler):
  \"\"\"
  Test retrieval times of various important records in the BigTable database 
  \"\"\"
  def get(self):
            


        
相关标签:
3条回答
  • 2020-12-08 05:02
    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)  
    
    0 讨论(0)
  • 2020-12-08 05:04

    If you pass the class object directly, as in your code between "like this" and "or", you can get its name as the __name__ attribute.

    Starting with the name (as in your code after "or") makes it REALLY hard (and not unambiguous) to retrieve the class object unless you have some indication about where the class object may be contained -- so why not pass the class object instead?!

    0 讨论(0)
  • 2020-12-08 05:23

    A slight variation of Ned's code that I used. This is a web application, so I start it by running the get routine via a URL: http://localhost:8080/TestSpeedRetrieval. I didn't see the need of the 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) 
    

    Output:

    Subscriber count=11 Duration=0:2
    _AppEngineUtilities_SessionData count=14 Duration=0:1  
    CustomLog count=5 Duration=0:2
    
    0 讨论(0)
提交回复
热议问题