python 中相互依赖的静态方法
Inter-dependent staticmethod's in python
静态方法在 python 中的用途之一(我假设通常是 OOP)是编写实际上不需要访问任何属性的实用程序函数。我认为它更多的是为了可读性以及让用户直接使用 class 名称而不是 class.
的实例
您可能需要使用依赖于其他静态方法的静态方法执行任务。在这种情况下,什么是好的做法?是不是一定要写成实例方法,然后实例化class,让每个方法都可以通过实例访问其他方法?示例:
这是不可能的:
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
你需要的是 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()
静态方法在 python 中的用途之一(我假设通常是 OOP)是编写实际上不需要访问任何属性的实用程序函数。我认为它更多的是为了可读性以及让用户直接使用 class 名称而不是 class.
的实例您可能需要使用依赖于其他静态方法的静态方法执行任务。在这种情况下,什么是好的做法?是不是一定要写成实例方法,然后实例化class,让每个方法都可以通过实例访问其他方法?示例:
这是不可能的:
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
你需要的是 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()