2017-08-22 6 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

大丈夫私はインスタンスの 'varchar({})。format(size)'にデータ型を変換したクラスの中で 'toString()'関数を使用したいと言っています。 'def createVarChar'は外部にあることもあれば、そこにあり、' dataType'をクラス内の別の関数の中に入れることができますか? –

2

あなたは@classmethodを使用することがあります。

@classmethod 
def createVarChar(cls, size, charSet): 
    return cls(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet) 
関連する問題