这是关于使用python从不同形式的相同数据创建类或类型的实例的最佳实践的问题。使用类方法更好还是更好地使用单独的函数?可以说我有一个类来描述文档的大小。 (注:这是一个简单的例子,我想知道创造而不是类的实例来描述文档的大小的最佳方式的最佳途径。)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)
OR
def create_instance_from_bytes(bytes):
bits = bytes * Size.BYTE
return Size(bits)
这似乎并不像一个问题,也许这两个例子都是有效的,但每次我需要实现这样的时间去想它。很长时间以来,我更喜欢类方法,因为我喜欢将类和工厂方法捆绑在一起的组织优势。此外,使用类方法保留了创建任何子类的实例的能力,因此更加面向对象。另一方面,一位朋友曾经说过:“如果有疑问,做标准库的工作”,我还没有在标准库中找到这方面的例子。
任何反馈是非常感谢。
干杯
我会抛硬币。大多数python库似乎更喜欢程序化API,但那是因为它们意味着以与代码库内部的可重用代码不同的方式使用。 – millimoose 2013-02-21 00:27:16
PS,不要调用变量'bytes';这是内建类型(在2.6及更高版本中)。 – abarnert 2013-02-21 00:32:24
当然,我只是意识到我在我的回答中犯了同样的错误:'Size(bytes = 20)'。不要照我的意思去做,照我说的去做。 :) – abarnert 2013-02-21 01:09:48