__init__ 외부에 정의 된 인스턴스 속성 attribute_name
다음과 같이 여러 함수를 호출하도록하여 클래스 생성자를 분할했습니다.
class Wizard:
def __init__(self, argv):
self.parse_arguments(argv)
self.wave_wand() # declaration omitted
def parse_arguments(self, argv):
if self.has_correct_argument_count(argv):
self.name = argv[0]
self.magic_ability = argv[1]
else:
raise InvalidArgumentsException() # declaration omitted
# ... irrelevant functions omitted
통역사가 행복하게 코드를 실행하는 동안 Pylint는 다음과 같은 불만을 제기합니다.
Instance attribute attribute_name defined outside __init__
복잡한 Google 검색은 현재 성과가 없습니다. 모든 생성자 논리를 유지하는 것은 구성 __init__
되지 않은 것으로 보이며 Pylint 경고를 끄는 것도 해킹처럼 보입니다.
A /이란 무엇입니까 파이썬 이 문제를 해결하는 방법은?
이 메시지의 기본 개념은 가독성을위한 것입니다. 인스턴스의 __init__
메소드 를 읽어 인스턴스가 가질 수있는 모든 속성을 찾을 것으로 예상합니다 .
그래도 초기화를 다른 방법으로 분할하고 싶을 수도 있습니다. 이 경우 하위 초기화 메소드를 호출하여 속성을 None
약간의 문서와 함께 간단히 할당 할 수 있습니다 __init__
.
필요에 따라 튜플을 반환하고 parse_arguments()
속성 내부 __init__
로 압축을 푸십시오 .
또한을 사용하는 대신 예외를 사용하는 것이 좋습니다 exit(1)
. 당신은 역 추적, 코드 재사용 등을 얻습니다.
class Wizard:
def __init__(self, argv):
self.name,self.magic_ability = self.parse_arguments(argv)
def parse_arguments(self, argv):
assert len(argv) == 2
return argv[0],argv[1]
함수를 통해 설정하려는 각 속성에 대해 init에서 함수를 호출하십시오. 예를 들어 다음은 ascii_txt 속성을 설정하는 데 효과적입니다 ...
def __init__(self, raw_file=None, fingerprint=None):
self.raw_file = raw_file
self.ascii_txt = self.convert_resume_to_ascii()
def convert_resume_to_ascii(self):
ret_val = self.raw_file.upper()
return ret_val
init 외부의 인스턴스 변수 정의는 일반적으로 권장되지 않지만 자연스럽지 않은 경우는 드 rare니다. 예를 들어, 하위 클래스에서 사용하지 않을 여러 변수를 정의하고 그 정의로 인해 하위 낭비 시간이나 자원을 만들거나 단순히 미학적 인 변수를 정의하는 상위 클래스가있는 경우.
이에 대한 한 가지 가능한 해결책은 init-extention 함수를 사용하는 것입니다. 각 자식 클래스는 대체 할 수 있으며이 함수에서는 클래스 고유 인스턴스 변수를 정의하기 위해 함수 setattr을 사용합니다. 이것이 너무 심미적이지는 않지만 여기서 논의 된 보푸라기 경고를 제거합니다.
참고 URL : https://stackoverflow.com/questions/19284857/instance-attribute-attribute-name-defined-outside-init
'programing tip' 카테고리의 다른 글
"배치"란 무엇이며 GO가 사용되는 이유는 무엇입니까? (0) | 2020.07.01 |
---|---|
xcode4의 프레임 워크와 정적 라이브러리의 차이점과 호출 방법 (0) | 2020.07.01 |
BREW 설치 시간이 너무 많이 걸리는 gcc (0) | 2020.07.01 |
XMLHttpRequest에서 진행하는 방법 (0) | 2020.07.01 |
Javascript의 문자열에서 $ {} (달러 기호 및 중괄호)의 의미는 무엇입니까? (0) | 2020.07.01 |