作为一个简单的例子,我们假设我们要创建许多Earthquake
个实例,其名称,起源时间和震源坐标属性来自编码为字符串("Nepal 25-4-2015T11:56:26 28.14 84.71 15.0"
)的其他来源。
class Earthquake(object):
def __init__(self, strline):
....
所以,我们必须做的是:
解析字符串以接收姓名,日期,时间,纬度,经度和深度。
通过将这些值传递给初始化调用Earthquake
来实例化__init__
。
想象一下,第一部分是通过一个简单的函数完成的:
import datetime as dt
def myfunc(strline):
items = line.split()
name = items[0]
otime = dt.datetime.strptime(items[1], "%d-%m-%YT%H:%M:%S")
lat, lon, depth = map(float, items[2:])
现在我想使用类class Earthquake
以每个对象具有属性Earthquake
,Earthquake.name
,Earthquake.otime
,{的方式创建Earthquake.lat
个对象{1}}和Earthquake.lon
。
如何在类中的Earthquake.depth
方法中调用myfunc
方法来初始化具有上述属性的对象?
答案 0 :(得分:6)
我会完全反过来这样做。解析该字符串显然是$(function () {
if (!app.noticeModal) {
this.noticeModal = new $.modal({
closeOnSideClick: true,
staticPos: true
});
}
this.noticeModal.setContent($('#contract-suspension-modal').html());
this.noticeModal.show();
});
对象应该做的部分,因此使用类方法将其作为备用构造函数提供:
Earthquake
现在你打电话给例如:
class Earthquake(object):
def __init__(self, name, otime, lat, lon, depth):
self.name = name
self.otime = otime
self.lat = lat
self.lon = lon
self.depth = depth
@classmethod
def from_string(cls, strline):
items = line.split()
name = items[0]
otime = dt.datetime.strptime(items[1], "%d-%m-%YT%H:%M:%S")
lat, lon, depth = map(float, items[2:])
return cls(name, otime, lat, lon, depth)
或者,如果您希望该功能保持独立,请向其添加quake = Earthquake.from_string("Nepal 25-4-2015T11:56:26 28.14 84.71 15.0")
:
return
并让类方法调用它:
def myfunc(strline):
...
return name, otime, lat, lon, depth
(如果此语法不熟悉,请参阅What does ** (double star) and * (star) do for parameters?)
答案 1 :(得分:3)
你可以做的一件事就是以字符串作为参数调用Earthquake,并在__init__
调用解析函数。
import datetime as dt
class Earthquake(object):
def __init__(self, strline):
self.parse_data(strline)
def parse_data(self, strline):
items = line.split()
self.name = items[0]
self.otime = dt.datetime.strptime(items[1], "%d-%m-%YT%H:%M:%S")
self.lat, self.lon, self.depth = map(float, items[2:])