在 Python 中的 class 方法中创建一个实例
Create an instance in a class method in Python
我正在尝试创建 DataType
class 以反映 SQL 数据库中的数据类型。由于数据类型需要不同的信息,如size
、precision
等,创建实例时需要指定不同的参数。
我希望能够用 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)
您可以使用 @classmethod
:
@classmethod
def createVarChar(cls, size, charSet):
return cls(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet)
标准方法是创建一个函数:
def createVarChar(size, charSet):
return Datatype(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet)
另一种选择是创建一个 class 方法:
class DataType(object):
...
@classmethod
def createVarChar(cls, size, charSet):
return cls(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet)
这允许此方法正确地使用继承,而自由函数则不能。
我正在尝试创建 DataType
class 以反映 SQL 数据库中的数据类型。由于数据类型需要不同的信息,如size
、precision
等,创建实例时需要指定不同的参数。
我希望能够用 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)
您可以使用 @classmethod
:
@classmethod
def createVarChar(cls, size, charSet):
return cls(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet)
标准方法是创建一个函数:
def createVarChar(size, charSet):
return Datatype(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet)
另一种选择是创建一个 class 方法:
class DataType(object):
...
@classmethod
def createVarChar(cls, size, charSet):
return cls(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet)
这允许此方法正确地使用继承,而自由函数则不能。