这是一个关于使用 python 从相同数据的不同形式创建类或类型的实例的最佳实践的问题。使用类方法更好还是完全使用单独的函数更好?假设我有一个用于描述文档大小的类。(注意:这只是一个示例。我想知道创建类实例的最佳方式,而不是描述文档大小的最佳方式。)
class Size(object):
"""
Utility object used to describe the size of a document.
"""
BYTE = 8
KILO = 1024
def __init__(self, bits):
self._bits = bits
@property
def bits(self):
return float(self._bits)
@property
def bytes(self):
return self.bits / self.BYTE
@property
def kilobits(self):
return self.bits / self.KILO
@property
def kilobytes(self):
return self.bytes / self.KILO
@property
def megabits(self):
return self.kilobits / self.KILO
@property
def megabytes(self):
return self.kilobytes / self.KILO
我的__init__
方法采用以位表示的大小值(位且只有位,我想保持这种方式),但可以说我有一个以字节为单位的大小值,我想创建我的类的一个实例。使用类方法更好还是完全使用单独的函数更好?
class Size(object):
"""
Utility object used to describe the size of a document.
"""
BYTE = 8
KILO = 1024
@classmethod
def from_bytes(cls, bytes):
bits = bytes * cls.BYTE
return cls(bits)
或者
def create_instance_from_bytes(bytes):
bits = bytes * Size.BYTE
return Size(bits)
这似乎不是一个问题,也许这两个例子都是有效的,但我每次需要实现这样的东西时都会考虑它。很长一段时间以来,我都偏爱类方法方法,因为我喜欢将类和工厂方法捆绑在一起的组织优势。此外,使用类方法保留了创建任何子类的实例的能力,因此它更加面向对象。另一方面,一位朋友曾经说过“当有疑问时,做标准库所做的事情”,我还没有在标准库中找到这样的例子。