2017-08-22 28 views
1

我正在尝试创建DataType类来反映SQL数据库中的数据类型。由于数据类型需要不同的信息,例如size,precision等,创建实例时需要指定不同的参数。在Python的类方法中创建实例

我希望能够用类似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) 

回答

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) 

这允许t他的方法与继承正常工作,这是一个免费的功能不会。

+0

好吧让我说,例如,我想在类内部有一个'toString()'函数,并且我将数据类型转换为例如'varchar({}).format(size)'这意味着我必须在外部的'def createVarChar',或者无论如何,我可以在类中的另一个函数内获得'dataType'? –

2

您可以使用@classmethod

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