在Python中的类方法中创建一个实例

时间:2017-08-22 16:33:08

标签: python class oop initialization factory

我正在尝试创建DataType类以反映SQL数据库中的数据类型。由于数据类型需要不同的信息,如sizeprecision等,因此在创建实例时需要指定不同的参数。

我希望能够使用类似DataType.createVarChar(size, charSet)的内容来调用它。到目前为止,我已经编写了下面的代码,但我不确定这是否是正确的方法,因为我最初在创建一个对象时没有提供任何信息。

在这种情况下,正确的设计是什么?

class SQLDatatype(Enum):
    UNSUPPORTED,
    VARCHAR


class DataType(object):

    def __init__(self, dataType=None, precision=None, scale=None, size=None, charSet=None):
        self.dataType = dataType
        self.precision = precision
        self.scale = scale
        self.size = size
        self.withLocalTimezone = withLocalTimezone
        self.charSet = charSet

    def createVarChar(self, size, charSet):
        return Datatype(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet)

2 个答案:

答案 0 :(得分:3)

标准方法是创建一个函数:

def createVarChar(size, charSet):
    return Datatype(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet)

另一种选择是创建一个类方法:

class DataType(object):
    ...
    @classmethod
    def createVarChar(cls, size, charSet):
        return cls(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet)

这允许此方法与继承一起正常工作,而自由函数则不会。

答案 1 :(得分:2)

您可以使用@classmethod

@classmethod
def createVarChar(cls, size, charSet):
    return cls(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet)