如何在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:])
    
    现在,我想使用class
    class 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:])