2017-08-22 29 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) 
相關問題