我有以下父类。
df = df.withColumn('Result', F.concat(F.lit('$'),(F.round(F.col('difference'),2)).cast('string')))
df.select('Price', 'Budget', 'Result').show()
+-----+------+------+
|Price|Budget|Result|
+-----+------+------+
|$41.5| $32.7| $8.8|
|$43.5| $32.7| $10.8|
|$44.5| $32.7| $11.8|
+-----+------+------+
父类包含一个元素,该元素存在于所有子实现中。但是在每个子实现中,我如何获取此元素的方式都不同。也许我正试图解决这个本来的错误。
以下是子类的示例:
class SomeType {}
abstract class Parent {
protected element : SomeType;
protected constructor() {
this.element = this.getElement();
}
public abstract getElement() : SomeType;
}
重点是:
在设置class Child extends Parent{
public constructor(
protected readonly selector : string
) {
super();
}
public getElement() : SomeType {
return someMagicalGetter(this.selector);
}
}
之前会调用super()
。但是我需要this.selector
方法中this.selector
的值。
问题:是否有更好的方法来解决此问题? (我猜有,但是那怎么办?)
答案 0 :(得分:0)
我想出了一个可能的解决方案:
abstract class Parent {
protected element : SomeType;
protected constructor(selector : string) {
this.element = this.getElement(selector);
}
public abstract getElement(selector) : SomeType;
}
class Child extends Parent{
public constructor(
protected readonly selector : string
) {
super(selector);
}
public getElement(selector : string) : SomeType {
return someMagicalGetter(selector);
}
}
实际上,以上示例针对此用例进行了解决。但实际上,如果孩子有一个以上getElement
方法中正在使用的参数,那么这不是一个好的解决方案。
编辑:
我决定使用以下内容:
abstract class Parent {
protected constructor(protected readonly element : SomeType) { }
}
class Child extends Parent{
public constructor(
protected readonly selector : string
) {
super(someMagicalGetter(selector));
}
}
我有点复杂了。