Pylint의 "너무 적은 공공 방법" 메시지는 무엇을 의미합니까?
일부 코드에서 Pylint를 실행하고 있는데 "Too lunnel public methods (0/2)" 오류가 발생했습니다.이 메시지의 의미는 무엇입니까?
Pylint 설명서는 유용하지 않습니다.
클래스에 공개 메서드가 너무 적을 때 사용되므로 해당 클래스가 실제로 가치가 있는지 확인합니다.
오류는 기본적으로 클래스를 사전으로 취급하기 때문에 클래스가 데이터만 저장하는 것이 아니라는 것을 나타냅니다.클래스에는 보유한 데이터에 대해 작동할 수 있는 방법이 몇 가지 이상 있어야 합니다.
클래스가 다음과 같은 경우:
class MyClass(object):
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
이나 사전을 사용하는 것을 고려해 보세요.namedtuple대신. 인 것 , 하세요.수업이 최선의 선택인 것 같으면, 그것을 사용하세요.필린트는 항상 무엇이 최선인지 알지는 못합니다.
로 참은 다음과 같습니다.namedtuple는 불변이며 인스턴스화 시 할당된 값은 나중에 수정할 수 없습니다.
클래스를 확장하는 경우 이 경고를 체계적으로 비활성화하고 Celery 작업의 경우 다음과 같이 진행하는 것이 좋습니다.
class MyTask(celery.Task): # pylint: disable=too-few-public-methods
"""base for My Celery tasks with common behaviors; extends celery.Task
...
단 하나의 기능만 확장하더라도 이 기술을 작동시키기 위해서는 클래스가 반드시 필요하며, 타사 클래스에서 해킹하는 것보다 확장하는 것이 확실히 더 좋습니다!
이것은 필린트의 맹목적인 규칙의 또 다른 사례입니다.
데이터를 것이 - 진술입니다."클래스는 데이터를 저장하기 위한 것이 아닙니다." - 잘못된 설명입니다.사전이 모든 것에 좋은 것은 아닙니다.클래스의 데이터 멤버는 의미 있는 것이고 사전 항목은 선택적인 것입니다.할 수 요: 할 수 .dictionary.get('key', DEFAULT_VALUE)을 방지하기 위해KeyError 하만간것없은습다니한단지▁simple▁no▁is다없▁but니▁there__getattr__결석으로
구조체를 사용하는 권장 방법
제 답변을 업데이트해야 합니다.지금 당장 - 만약 당신이 필요하다면.struct에게는 두 선택지가 : 가지훌륭옵있션습다두니이한두다▁you있.
그냥 사용하기attrs
이를 위한 라이브러리는 다음과 같습니다.
https://www.attrs.org/en/stable/
import attr
@attr.s
class MyClass(object): # Or just MyClass: for Python 3
foo = attr.ib()
bar = attr.ib()
것: 를 쓰지 것, 검사, 생자를작않음, 값검사성, 효유기지,__repr__ 개체 " " " " " " ( " " " " 를 합니다.namedtuplesPython 2) 등에서도 사용할 수 있습니다.
용을 합니다.dataclasses(그림 3.7+)
hwjp님의 hwjp님의 hwjp님의 hwjp님의 hwjp님의 hwjp님의 hwjp님을 dataclasses:
https://docs.python.org/3/library/dataclasses.html
이것은 거의 같은 수준입니다.attrsPython 3.7+를 제외하고는 별도의 종속성이 없는 표준 라이브러리 메커니즘("배터리 포함")입니다.
나머지 이전 답변
NamedTuple좋지 않습니다 - 특히 Python 3의 이전 버전.typing.NamedTuple: https://docs.python.org/3/library/typing.html#typing.NamedTuple
- 당신은 분명히 "에서 파생된 클래스"를 확인해야 합니다.
NamedTuple무늬를 넣다파이썬 2 -namedtuples문자열 설명에서 생성됨 - 못생기고, 나쁘고, "문자열 리터럴 내부의 프로그래밍" 바보 같은 것입니다.
저는 현재 두 가지 답변("다른 것을 사용하는 것을 고려하지만, 필린트가 항상 옳은 것은 아닙니다."와 "필린트가 댓글을 억제하는 것을 사용합니다.")에 동의하지만, 저는 제 나름의 제안이 있습니다.
다시 한 번 말씀드리겠습니다.일부 클래스는 데이터를 저장하기 위한 것입니다.
이제 사용도 고려할 수 있는 옵션입니다.property-예스
class MyClass(object):
def __init__(self, foo, bar):
self._foo = foo
self._bar = bar
@property
def foo(self):
return self._foo
@property
def bar(self):
return self._bar
위에는 Value Object(예: 도메인 기반 설계의 속성)에 대해 OK인 읽기 전용 속성이 있지만 세터를 제공할 수도 있습니다. 이렇게 하면 클래스가 사용자가 가지고 있는 필드에 대해 책임을 질 수 있습니다. 예를 들어, 세터가 있는 경우 생성자에서 이러한 속성을 사용하여 할당할 수 있습니다.self.foo = foo직접적인 대신에self._foo = foo그러나 세터는 다른 필드가 이미 초기화되었다고 가정할 수 있으므로 생성자에서 사용자 정의 유효성 검사가 필요합니다.
당신의 상사가 단일 책임 원칙을 기대할 때는 힘들지만, 필린트는 아니라고 합니다.따라서 수업에 두 번째 방법을 추가하여 수업이 단일 책임 원칙을 위반하도록 하십시오.당신이 단일 책임 원칙을 어디까지 가져가야 하는지는 보는 사람의 눈에 달려 있습니다.
나의 해결책!
저는 수업에 추가적인 방법을 추가해서 이제 두 가지 일을 합니다.
def __str__(self):
return self.__class__.__name__
저는 지금 제 수업을 두 개의 개별 파일과 모듈로 나누어야 하는지 궁금합니다.
문제는 해결되었습니다. 하지만 제 동료들이 하루 종일 사양에 대해 논쟁을 벌이는 것은 아닙니다. 삶과 죽음처럼 말이죠.
언급URL : https://stackoverflow.com/questions/14027417/what-does-pylints-too-few-public-methods-message-mean
'source' 카테고리의 다른 글
| 파괴 바인딩된 사전 내용 (0) | 2023.07.19 |
|---|---|
| Delphi 데이터 인식 구성 요소 사용 - 장단점 (0) | 2023.07.19 |
| 당신은 레일즈에서 DB 사용자 이름, pw, 데이터베이스 이름을 얻을 수 있습니까? (0) | 2023.07.19 |
| 구체화된 보기 - 마지막 새로 고침 확인 (0) | 2023.07.19 |
| 판다와 함께하는 파이썬 타입 힌트? (0) | 2023.07.19 |