간단한 예로서, 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
, Earthquake.lon
와 Earthquake.depth
.
위의 속성으로 객체를 초기화하기 위해 클래스의 myfunc
메서드에서 __init__
메서드를 호출하려면 어떻게 해야합니까?
나는 완전히 다른 방법으로 할 것입니다. 해당 문자열을 구문 분석하는 것은 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] 삭제
몇 마디 만하겠습니다