【问题标题】:Inter-dependent staticmethod's in pythonpython中相互依赖的静态方法
【发布时间】:2021-12-12 07:35:02
【问题描述】:

python 中静态方法的用途之一(我一般假设为 OOP)是编写不需要访问任何属性的实用程序函数。我认为它更多的是为了可读性以及让用户直接使用类名而不是类的实例。

您可能需要使用依赖于其他静态方法的静态方法执行任务。在这种情况下有什么好的做法?您是否必须将它们编写为实例方法并实例化该类以让每个方法都可以通过实例访问其他方法?示例:

这是不可能的:


class AWSHandler:

     @staticmethod
     def do_a_job():
        credentials = _get_credentials()
        return _job_handler(credentials)
     
     @staticmethod
     def _get_credentials():
          return credentials

     @staticmethod
     def _job_handler(credentials):
         return result

这是可能的,但需要实例化一个对象:


class AWSHandler:

     def do_a_job(self):
        credentials = self._get_credentials()
        return self._job_handler(credentials)
     
     def _get_credentials(self):
          return credentials

     def _job_handler(self, credentials):
         return result

【问题讨论】:

    标签: python-3.x oop static-methods


    【解决方案1】:

    你需要的是classmethod:

    class AWSHandler:
    
         @classmethod
         def do_a_job(cls):
            credentials = cls._get_credentials()
            return cls._job_handler(credentials)
         
         @classmethod
         def _get_credentials(cls):
              return credentials
    
         @classmethod
         def _job_handler(cls, credentials):
             return result
    

    然后你可以简单地写

    AWSHandler.do_a_job()
    

    【讨论】:

    • 谢谢你!我的印象是类方法只对重载 init 方法有用!很好的提示! @塞尔丘克
    猜你喜欢
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2016-07-11
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多