我有一个基类(太空飞船),它具有一些变量和一个初始化程序。 我还有一个子类(UFO),它仅需要超类的变量之一。 当我尝试创建基本的UFO对象时,我得到:“调用var c = UFO()时缺少参数'weapon'的参数” 我意识到错误消息要求输入武器参数,但是如何(甚至可能?)创建不需要武器参数的基本UFO对象?
花了几个小时修改“ override”,“ init”和“ super”命令。我在SO和其他站点上已经阅读了很多文章,但是没有看到任何与我的情况类似的示例。再一次,我假设我想做的事情是可以开始的。
from pyspark.sql import SparkSession
from pyspark.ml import Pipeline
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.evaluation import BinaryClassificationEvaluator
from pyspark.ml.feature import HashingTF, Tokenizer
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder
spark = SparkSession\
.builder\
.master('local[1]')\
.getOrCreate()
# The target variable is foo
training = spark.createDataFrame([
(0, "a b c d e spark", 1.0),
(1, "b d", 0.0),
(2, "spark f g h", 1.0),
(3, "hadoop mapreduce", 0.0),
(4, "b spark who", 1.0),
(5, "g d a y", 0.0),
(6, "spark fly", 1.0),
(7, "was mapreduce", 0.0),
(8, "e spark program", 1.0),
(9, "a e c l", 0.0),
(10, "spark compile", 1.0),
(11, "hadoop software", 0.0)
], ["id", "text", "foo"])
# I set labelCol as foo
tokenizer = Tokenizer(inputCol="text", outputCol="words")
hashingTF = HashingTF(inputCol=tokenizer.getOutputCol(), outputCol="features")
lr = LogisticRegression(maxIter=10, labelCol="foo")
pipeline = Pipeline(stages=[tokenizer, hashingTF, lr])
paramGrid = ParamGridBuilder() \
.addGrid(hashingTF.numFeatures, [10, 100, 1000]) \
.addGrid(lr.regParam, [0.1, 0.01]) \
.build()
crossval = CrossValidator(estimator=pipeline,
estimatorParamMaps=paramGrid,
evaluator=BinaryClassificationEvaluator(),
numFolds=2)
# Run cross-validation, and choose the best set of parameters.
cvModel = crossval.fit(training)
答案 0 :(得分:1)
您可以做的是将weapon
标记为optional String
。另外,在init(weapon:)
中,将weapon
的 默认值 用作nil
,即
class Spaceship {
var isUFO = false
var weapon: String? //here...
init(weapon: String? = nil) { //here...
self.weapon = weapon
}
func printSomething() {
print("Test")
}
}
现在,您可以简单地创建带有和不带有class UFO
的{{1}}对象,即
weapon
答案 1 :(得分:1)
首先,在使用继承时,您必须考虑“是”关系:UFO 是宇宙飞船。因此,当每个太空飞船都有武器,而飞碟是太空飞船时,那么每个飞碟也必须有武器。
您可以要做的是使您的武器成为可选武器,但我认为这在某种程度上是一种误用。另外,请重新考虑您的isUFO
属性:
is
运算符检查Spacehip
的动态类型如果您不希望这种继承行为,则最好考虑其他事情,例如协议,在其中您仅指定某些行为而没有内存布局。