__init__ 메서드에서 메서드를 호출하여 파이썬에서 객체의 속성을 도입하는 방법은 무엇입니까?

니마 노 시리

간단한 예로서, Earthquake문자열 ( "Nepal 25-4-2015T11:56:26 28.14 84.71 15.0") 로 인코딩 된 다른 소스에서 오는 이름, 원점 시간 및 중심 좌표 속성을 갖는 많은 인스턴스 를 작성한다고 가정 해 보겠습니다 .

class Earthquake(object):
    def __init__(self, strline):
        ....

그래서 우리가해야 할 일은 :

  1. 문자열을 구문 분석하여 이름, 날짜, 시간, 위도, 경도 및 깊이를받습니다.

  2. 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, Earthquake.lonEarthquake.depth.

위의 속성으로 객체를 초기화하기 위해 클래스의 myfunc메서드에서 __init__메서드를 호출하려면 어떻게 해야합니까?

Jonrsharpe

나는 완전히 다른 방법으로 할 것입니다. 해당 문자열을 구문 분석하는 것은 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하려면 a 추가 하십시오.

def myfunc(strline):
    ...
    return name, otime, lat, lon, depth

클래스 메서드가 호출하도록합니다.

class Earthquake(object):

    ...

    @classmethod
    def from_string(cls, strline):
        return cls(*myfunc(strline))

(이 구문이 익숙하지 않은 경우 매개 변수에 대해 ** (이중 별표) 및 * (별표)의 기능은 무엇입니까? )

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관