我有一个带有两个构造函数的基类,它们接受num_weeks = len(week_list)
num_idxs = len(df['index'].unique())
print('creating dummies')
_dummy_idxs = list(itertools.chain.from_iterable(
itertools.repeat(x, 24*7*num_weeks) for x in df['index'].unique()))
print('\t_dummy_idxs')
_dummy_weeks = list(itertools.chain.from_iterable(
itertools.repeat(x, 24*7) for x in week_list)) * num_idxs
print('\t_dummy_weeks')
_dummy_days = list(itertools.chain.from_iterable(
itertools.repeat(x, 24) for x in range(0,7))) * num_weeks * num_idxs
print('\t_dummy_days')
_dummy_hours = list(range(0,24)) * 7 * num_weeks * num_idxs
print('\t_dummy_hours')
print('Creating dummy_hour_df with {0} rows...'.format(len(_dummy_hours)))
# the part below takes the longest time
dummy_hour_df = pd.DataFrame({'index': _dummy_idxs, 'week': _dummy_weeks, 'day': _dummy_days, 'hour': _dummy_hours})
print('dummy_hour_df completed')
和errorMessage
。 errorCode
是强制性的,而errorMessage
不是强制性的。
errorCode
和具有主要构造函数的派生类
class FooBaseClass{
constructor(errorMessage: String) // 1. Constructor
constructor(errorMessage: String, errorCode: Int) // 2. Constructor
}
我想按如下方式设计派生类的构造函数;
如果系统仅提供class FooDerivedClass(errorMessage: String, errorCode: Int) :
FooBaseClass(errorMessage, errorCode)
,我想在基类中调用1.Constructor。如果系统同时提供两个参数,则我想调用2.Constructor。
什么样的设计解决方案最适合这里?
答案 0 :(得分:3)
您称呼您需要的过载,这很简单。
选项1
class FooBaseClass{
constructor(errorMessage: String){
}
constructor(errorMessage: String, errorCode: Int){
}
}
class FooDerivedClass : FooBaseClass{
constructor(errorMessage: String) : super(errorMessage)
constructor(errorMessage: String, errorCode: Int : super(errorMessage, errorCode)
}
我还要说的是,如果您不在这些构造函数中执行独立的操作,则使用默认值之类的会更容易。
选项2
class FooBaseClass{
constructor(errorMessage: String, errorCode: Int? = null){
if(errorCode != null){
//use it
}
}
}
class FooDerivedClass : FooBaseClass{
constructor(errorMessage: String, errorCode: Int? = null : super(errorMessage, errorCode)
}
只是一个建议。而且您可以更进一步,如果只有一个构造函数,则可以简单地执行默认构造函数,例如:
选项3
class FooBaseClass(errorMessage: String, errorCode: Int? = null){
val errStr: String = errorMessage
val errCode: Int? = errorCode
}
class FooDerivedClass
constructor(errorMessage: String, errorCode: Int? = null : super(errorMessage, errorCode){
}
注意*仅在执行获取/设置数据绑定或其他需要添加变量的注释时,才需要在局部变量中存储。
快乐编码