Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Python] 타입 힌트 내용 추가 #59

Merged
merged 3 commits into from
Aug 14, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions Python/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
Python
====

## 코드 스타일 도구

jseop-lim marked this conversation as resolved.
Show resolved Hide resolved
기본적으로 [PEP8](https://www.python.org/dev/peps/pep-0008/)의 스타일을 따릅니다. 그리고 저희들은 일관된 스타일을 작성하는데 도움을 주는 다양한 도구들을 활용하고 있습니다.
- [pre-commit](https://pre-commit.com/)
- [black](https://black.readthedocs.io/en/stable/)
Expand All @@ -25,6 +27,55 @@ max-line-length = 88
extend-ignore = E203
```

## Type Hinting
> [관련 논의](https://github.com/8percent/styleguide/discussions/47)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

관련 참고자료는 문서 최하단이나 주제의 하단에 참고 자료의 형태로 따로 모아두는것은 어떤가요?
논의를 통해 정해진 내용들이 가장 중요한 내용이라 그것을 중심으로 작성해 나가는것이 좋은것 같아서요.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

히스토리보단 결과를 담는 게 중요하다는 점에 동의합니다. 논의를 아예 안적어도 무방할 것 같고, 이 PR과 논의를 #을 사용하여 연결시켜주면 충분할 것 같습니다.

Copy link
Contributor Author

@jseop-lim jseop-lim Aug 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue와 달리 discussion은 서로 #으로 참조해도 PR 이력에 남지 않네요... 일단 #으로 PR과 discussion 간 서로 언급은 해두고, 관련 논의 줄은 가이드에서 지웠습니다.



함수를 정의할 때는 매개변수와 반환형에 대한 타입 힌트를 답니다. 타입 힌트의 최대 활용 범위는 코드 작성자 재량에 맡깁니다.
jseop-lim marked this conversation as resolved.
Show resolved Hide resolved

#### Do
```python
def greeting(name: str) -> str:
words = "Hello " + name
return words


def greeting(name: str) -> str:
words: str = "Hello " + name
return words
```

#### Don't do
```python
def greeting(name):
return "Hello " + name
```

인스턴스 메서드 첫 인자(self), 클래스 메서드 첫 인자(cls)에는 타입 힌트를 생략합니다.

#### Do
```python
class Car:
def move(self, goal: str) -> str:
return "Move to " + goal

def get_name(cls) -> str:
return "My Car"
```
Comment on lines +52 to +62
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p4. 논의가 필요한 내용인 것 같습니다.
PEP673에 따르면, self나 cls에 대해 타입 힌트를 생략하지 않는 것도 괜찮다고 합니다.
물론 python 3.11+ 혹은 typing-extension를 쓰는 경우에 그렇고,
지금은 필요한 경우 적어야 하고, 그 외에는 생략하는 게 좋은 것 같습니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typing-extension은 설치되어 있기 때문에, 모든 경우에 self, cls의 타입힌트를 생략할 수 있습니다.
아래 경우에는 생략하기 애매할 수 있는데, 아직 저희 코드베이스에는 등장하지 않습니다. 해당 경우가 발생하면 다시 의논의 여지가 있긴 하나, 우선 일관성을 고려하여 단정적인 어투의 생략합니다.를 유지하도록 하겠습니다.

    def add(self: Self, other: Self):
        ...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

별개로 get_name() 메서드에 @classmethod 데코레이터가 누락되었네요. 추가하겠습니다.


return을 통해 값을 반환하지 않는 함수는 반환형 타입 힌트를 생략할 수 있습니다.

#### Do
```python
def show_movie(name: str):
print("Hello " + name)


def show_movie(name: str) -> None:
print("Hello " + name)
```
jseop-lim marked this conversation as resolved.
Show resolved Hide resolved


## 이외의 규칙


Expand Down