我正在编写一些代码并尝试将其分解为类。我对OOP很陌生,在收到我写的工作时遇到了一些麻烦。我不得不在Python 2.7中编写它,因为我之后使用的一些软件包没有兼容Python 3。
我是否会继承遗产?我基本上希望Timeseries类能够使用附加到Reanalysis对象的所有变量和参数,但只能返回node_coordinates。
class Reanalysis():
"""Initiates a reanalysis object"""
def __init__(self, latitude, longitude, resolution):
self.datetime_format = '%Y-%B-%d %H:%M'
self.lat = latitude
self.lon = longitude
self.res = resolution
self.node_coordinates = Timeseries().node_coordinates
class Timeseries(Reanalysis):
def __init__(self):
super(Timeseries, self).__init__()
self.get_node_coordinates()
def get_node_coordinates(self):
"""Determines node coordinates
"""
latres = self.res
lonres = self.res
self.node_coordinates = set([(latres * np.floor(self.lat / latres),
lonres * np.floor(self.lon / lonres)),
(latres * np.ceil(self.lat / latres),
lonres * np.floor(self.lon / lonres)),
(latres * np.floor(self.lat / latres),
lonres * np.ceil(self.lon / lonres)),
(latres * np.ceil(self.lat / latres),
lonres * np.ceil(self.lon / lonres))])
当我尝试编译时,我收到错误:
super(Timeseries, self).__init__()
TypeError: must be type, not classobj
由于
答案 0 :(得分:0)
我认为你的问题是你没有将你的类定义为'new-style'类(即继承自'object'的类)。尝试将声明更改为
super(...)
这应该允许它与final Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "WiFi change detected; updating information...", Snackbar.LENGTH_LONG);
snackbar.setAction("DISMISS", new View.OnClickListener() {
@Override
public void onClick(View v) {
snackbar.dismiss();
}
});
正确互动。
您还需要匹配超类init的参数列表。超类需要传递3个参数。
答案 1 :(得分:0)
问题在于:
self.node_coordinates = Timeseries().node_coordinates
Timeseries
类继承自Reanalysis
,这意味着您无法使用Timeseries
初始化Reanalysis
对象。