是否可以使用using ExamResultMap = MapOfMaps<Student, Exam, Result>;
来创建具体的getter,但是使setter抽象,以使每个继承类的不同。我为每个子类处理val的设置。
例如
template <typename Key1, typename Key2, typename T>
class MatrixMap
{
std::vector<Key2> key2s_;
std::unordered_map<Key1, std::vector<T>> values_;
std::unordered_map<std::reference_wrapper<const Key2>, std::size_t> key2_indicies_;
public:
// API
};
答案 0 :(得分:9)
你需要一点间接。像往常一样定义setter,但让它调用一个执行实际工作的抽象方法。然后每个子类都需要提供那个方法的定义。例如,
class Base(object):
__metaclass__ = abc.ABCMeta
def __init__(self):
self._val = 3
@property
def val(self):
return self._val
@val.setter
def val(self, x):
self._val_setter(x)
@abc.abstractmethod
def _val_setter(self, x):
pass
class Child(Base):
def _val_setter(self, x):
self._val = 2*x
然后
>>> c = Child()
>>> print c.val
3
>>> c.val = 9
>>> print c.val
18
答案 1 :(得分:5)
我最终是怎么做到的。
class C(metaclass=ABCMeta):
@property
def x(self):
...
@x.setter
@abstractmethod
def x(self, val):
...
class D(C):
@C.x.setter
def x(self, val):
...
答案 2 :(得分:0)
df_schema = sqlContext.read.format('com.databricks.spark.xml').options(rowTag='<xml_tag_name>').load(schema_path)