繁体   English   中英

在Python的类方法中创建实例

[英]Create an instance in a class method in Python

我正在尝试创建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)

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

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)

这使该方法可以正确地使用继承,而自由函数则不能。

您可以使用@classmethod

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM