如何在python中通过调用_init__方法中的方法来引入对象的属性?
作为一个简单的例子,让我们假设我们想要创建许多如何在python中通过调用_init__方法中的方法来引入对象的属性?,python,oop,Python,Oop,作为一个简单的例子,让我们假设我们想要创建许多地震实例,其名称、原点时间和震源坐标属性来自其他编码为字符串的源(“Nepal 25-4-2015T11:56:26 28.14 84.71 15.0”) 因此,我们必须做的是: 解析字符串以接收名称、日期、时间、纬度、经度和深度 通过将这些值传递给初始化调用来实例化地震 假设第一部分由一个简单的函数完成: import datetime as dt def myfunc(strline): items = line.split()
地震
实例,其名称、原点时间和震源坐标属性来自其他编码为字符串的源(“Nepal 25-4-2015T11:56:26 28.14 84.71 15.0”
)
因此,我们必须做的是:
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:])
现在,我想使用classclass search
创建search
对象,每个对象都有属性search.name
,search.otime
,search.lat
,search.lon
和search.depth
如何在类中调用
\uuuu init\uuuu
方法中的myfunc
方法来初始化具有上述属性的对象?我完全可以用另一种方法来实现。解析该字符串显然是地震
对象应该做的事情的一部分,因此使用类方法将其作为替代构造函数提供:
现在你打电话,例如:
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
并使类方法调用它:
class Earthquake(object):
...
@classmethod
def from_string(cls, strline):
return cls(*myfunc(strline))
(如果不熟悉此语法,请参见)您可以使用字符串作为参数调用地震,然后在
\uuuu init\uuuuu
上调用解析函数
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:])
一些linter会抱怨您在
\uuuu init\uuuu
之外设置实例属性。这也使得测试类稍微困难一些,因为如果不将输入数据格式化为所需的字符串,就无法初始化它。
class Earthquake(object):
...
@classmethod
def from_string(cls, strline):
return cls(*myfunc(strline))
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:])