46,200원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
린터 설치문의
파이참의 플러그인 같은 기능인건가요?파이참에서는 어떻게 해야할까요?
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
데이터분석에서의 가상환경
안녕하세요데이터분석을 공부하고 있는 학생입니다가상환경에 대해 배웠는데 평소에 pandas, numpy 같은 라이브러리만 주로 사용합니다이런 경우에도 가상환경이 중요할지 여쭤보고 싶습니다좋은 강의 감사합니다!!
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
print(Robot.how_many()) 하면 None이 뜨는 이유
18분 13초 강의 부분에서 저는 print(Robot.how_many())를 습관적으로 하게되었는데요 이 부분에서 None이 출력이 되는데 왜 None이 출력이 되는지 모르겠습니다.
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
타입파이썬 문의
파이썬 typing모듈을 통해 def, variable, class에 설정가능한 타입을 지정이 가능한것으로 이해했습니다.mypy, pyright로는 정상적인 설정인지 확인이 가능하지만, 타입검증 명령없이 코드를 실행 할 경우 모두 문제없이 정상 동작되는걸로 보이는데, 별도 타입 검증 cli없이 코드내 타입을 검증하려면 별도 검증 로직을 넣어야하는건가요? 검증 로직 없이, python3 실행만으로 타입 검증에 대한 에러반환은 되지않는건지 문의드립니다. ex def type_chekcer(obj, typer) -> None: if isinstance(obj, typer): pass else: raise TypeError(f"Type Error : {typer}")
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
프레임워크 질문
본 강의와는 다른 내용이지만, 궁금한 점이 있습니다. 예시로 django라는 프레임워크를 말씀해주셨는데요. 인스타그램과 같은 소셜 서비스?(ex. 채팅앱, 커뮤니티앱 등) 성격을 띄는 앱들을 만들기에는 django 프레임워크가 제일 괜찮은가요? 아니면 fastapi로도 문제가 없는지 궁금합니다.
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
문수미님과 같은 내용입니다
코드를 살펴봐도 원인을 모르겠어서 질문 드립니다 mypy와 pyright 사용시에 각각 다르게 에러가 나고 내용은 아래와 같습니다 mypy error: Item "None" of "Optional[Node[Any]]" has no attribute "item" pyright error: "pointer" is not a known member of "None" . . error: "item" is not a known member of "None" 아마 Optional[Node]에서 None으로 처리될 때 pointer와 item속성이 없어서 이렇게 되는 것 같은데, 처리 방법을 찾지 못해서 질문 남깁니다. 아래는 전체 코드와 에러발생 위치입니다. from typing import Optional, Generic, TypeVar T = TypeVar("T") class Node(Generic[T]): def __init__(self, item: T, pointer: Optional['Node'] = None): self.item = item self.pointer = pointer class LinkedList(Generic[T]): def __init__(self): self.head: Optional[Node[T]] = None @property def length(self) -> int: if self.head is None: return 0 cur_node = self.head count: int = 1 while cur_node.pointer is not None: cur_node = cur_node.pointer count += 1 return count class Stack(Generic[T], LinkedList[T]): def push(self, item: T) -> None: new_node: Node[T] = Node[T](item) if self.head is None: self.head = new_node return cur_node = self.head while cur_node.pointer is not None: cur_node = cur_node.pointer cur_node.pointer = new_node def __str__(self) -> str: result: str = '' if self.head is None: return result cur_node: Node[T] = self.head result += f"{cur_node.item}" while cur_node.pointer is not None: cur_node = cur_node.pointer result += f", {cur_node.item}" return result def pop(self) -> T: if self.head is None: raise ValueError("Stack is Empty") cur_node = self.head if cur_node.pointer is None: self.head = None return cur_node.item while cur_node.pointer.pointer is not None: # <- pyright error "pointer" is not... x2 cur_node = cur_node.pointer # <- pyright error "pointer" is not... result = cur_node.pointer # <- pyright error "pointer" is not... cur_node.pointer = None # <- pyright error "pointer" is not... return result.item # <- mypy error / pyright error "item" is not ... if __name__ == '__main__': stack = Stack[int]() stack.push(0) stack.push(1) stack.push(2) stack.push(3) stack.push(4) stack.push(5) stack.push(6) stack.push(7) stack.push(8) stack.push(9) print(stack.length) print(stack) print(stack.pop()) print(stack.pop()) print(stack.pop()) print(stack.pop()) print(stack.pop()) print(stack.pop()) print(stack.pop()) print(stack.pop()) print(stack.pop()) print(stack.pop())
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
클래스 상속 순서? 질문
class Siri가 상속을 받을 때, class Siri(Robot[ARM, HEAD], Generic[ARM, HEAD]): pass 는 되는데, class Siri( Generic[ARM, HEAD], Robot[ARM, HEAD]): pass 위는 cannot create consistent method ordering에러를 내뱉네요. 상속 순서가 의미하는 것이 뭔가요? mro 찍어보니까 이렇게 나오네요. print(Siri.mro()) [<class '__main__.Siri'>, <class '__main__.Robot'>, <class 'typing.Generic'>, <class 'object'>]
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
pip과pip3의 차이
안녕하세요 선생님 vscode도 받고 파이썬도 받고 깃허브에 올려주신 설명대로 나름 열심히 따라갔는데요 가상환경을 만들때도 공식문서에는 python3 -m venv 라고 되어있는데 선생님은 python이라고 그냥 치시더라고요 이 차이가 궁금합니다 제 vs에서는python 대신 python3라고 해야 코드가 실행되고 pip 역시 마찬가지로 pip3라고 적어야 실행이 되던데, 이게 무슨 차이가 있는걸까요? 중요한 차이인가요?
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
메서드 리턴 값이 print일 때 print를 찍으면 None
Robot을 상속받은 siri 인스턴스로 call_me() 함수를 호출하면 "네?"가 리턴 됩니다. --> siri.call_me() # 네? 하지만 함수를 호출할 시 프린트 문을 사용하면 None이 다음 줄에 반환됩니다. --> print(siri.call_me()) # 네? # None call_me 함수에서는 return하는 값이 없으니 None이 나오는 것일까요?
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
변수의 참조에 대해서 질문입니다.
안녕하세요? 강의 막바지에서 좀 헤매고 있네요 해당 강의에서 다른 분꼐서 질문하신 부분(https://www.inflearn.com/questions/332096)의 내용에 대해 추가로 질문을 드리려고 합니다. 해당 질문에서 선생님이 답변해주신 부분중 두번째 단락의 내용입니다. """ 2, 3. 이전 스텝에서 cur_node = self.head 로직이 수행되는 순간 cur_node는 self.head의 값인 Node(12)가 그대로 들어가는 것이 아니라 Node(12)의 메모리 주소값이 들어갑니다. 즉, 엄밀히 말하면, cur_node 변수는 Node(12)를 가리키게 되는 것이죠. (엄밀하게 self.head 또한 Node(12)를 가리킨 상태였던 것입니다.) 따라서 cur_node.pointer = new_node 를 하는 순간, (new_node == Node(5)) cur_nore는 Node(12)를 가리키므로 Node(12)의 poiner에 Node(5)가 들어갑니다. 그런데 self.head 또한 Node(12)를 가리키고 있으므로 self.head가 가리키는 Node(12)의 pointer가 Node(5)가 되어 결론적으로 self.head == Node(12, Node(5))가 되는 것입니다. """ 요약하자면, self.head와 cur_node모두 Node(12)를 보고 있었고, cur_node.pointer = Node(5)가 들어가서, self.head의 메모리 주소에 위치한 값이 Node(12,Node(5))가 되었다고 이해했는데요 이렇게 되는 이유를 제가 찾아보면서 정리했는데, 정리한 밑의 문장들이 맞는지 확인을 좀 받고 싶습니다. Node(12,none)는 인스턴스 객체이고, 해당 item이나 pointer의 값을 저장하는 인스턴스 객체의 네임스페이스는 딕셔너리이다. 딕셔너리는 mutable하기 때문에 해당 원소들 중 하나의 값이 바뀔 수 잇따(즉 원소의 값을 변화시켜줄 때, 다른 메모리 주소를 가진 새 변수로 만들어주지 않아도 된다) 따라서, Node(12,none)은 메모리 주소의 변화없이 Node(12,5)가 될 수 있고 slef.head가 참조하는 메모리 주소역시 그대로이므로, self.head == Node(12,5)가 된다. 반대로 말하면, 'self.head == 5'와 같이 immutbale한 자료형 값을 참조하고 있었더라면, 위와같은 코드는 성립하지 않는다.(self.head에 새로운 값을 할당시켜주기 위해서는 값이 새로이 생성되어야 하고, 값이 새로이 생성되면 메모리 주소역시 바뀌므로) 또 특정 값이 None이 된다는 것은, 해당 변수의 메모리 주소자체가 없어진다는 뜻으로 이해를 해도 될까요? 정말 마지막으로, 약간은 강의외적인 부분에 대해서(완전 상관없는 부분은 아닙니다) 질문을 좀 여쭙고 싶은데, 혹시 메일을 드려도 될까요? 좋은 강의 감사했습니다.
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
질문입니다..
# 인스턴스 설정 siri = Siri("iphone8", 5) print(Siri.mro()) print(Robot.mro()) # int도 클래스이다 A = int(12) print(int.mro()) #출력 print(siri) print(A) 안녕하세요? 강의 잘 듣고 있습니다... 뭔가 정리가 안되기도 해서 여쭤봅니다 ㅠㅠ 1. int가 클래스이므로, A는 변수이면서도 int라는 클래스의 인스턴스 인건가요?(즉 그냥 관점에 따라 변수라고 부를수도, 인스턴스라고 부를수도 있는 것인가요?) 2. siri를 출력하면 <__main__.Siri object at 0x00000178D25F5AC0>와 같은식으로 메모리주소가 나오는 반면, A를 출력하면 12가 출력됩니다. 이는 선생님 말씀대로 파이썬 개발자들이 int의 인스턴스를 출력했을 때, 저런식으로(12가 출력되도록) 설정을 따로 해두었기 때문에 가능한건가요? 3. 그래서 실제로 int클래스가 어떤식으로 처리되어 있는지 한번 찾아보고 싶어서 int클래스를 따라가봤더니 굉장히 복잡하게 되어있더라구요.. 이런부분은 음.. 그냥 그렇구나~ 하고 넘어가면 되는 부분인지.. 선생님은 어떤식으로 공부하셨느지 한번 여쭤보고싶습니다 좋은 강의 감사합니다.
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
pyright 를 이용한 클래스 재정의 코드 실행 문제점 질문 드립니다.
안녕하세요. 강사님. 먼저 재미있고 흡입력있게 파이썬 타입 강의를 진행해주신 것 같아 감사의 말씀 드립니다. ^^ 제네릭 강의를 실습하다가 발견한 부분이 있어 질문을 드리고자 합니다. class Robot(Generic[ARM, HEAD]): class Siri(Generic[ARM, HEAD], Robot[ARM, HEAD]): pass 위와 같이 2개의 클래스 정의를 하여 mypy 를 이용하여 python 실행을 하는 경우와 python 실행만 하는 경우는 정상적으로 코드 실행이 되지만 pyright 의 경우에는 아래처럼 MRO 관련한 오류 메시지가 출력이 되며 실행이 되지 않는 것을 확인 하였습니다. error: Cannot create consistent method ordering 아래와 같이 실행을 하게 되면 정상적으로 pyright 도 실행이 되는 것을 확인 하였습니다. class Siri(Robot[ARM, HEAD]): pass pyright 를 사용하게 되면 자식클래스에 상속받는 부모클래스에서 처럼 명시적으로 생성자 타입을 정의를 하지 않아야 되는 PEP 가 존재하여 이를 준수하여 그리 되는 것인지 궁금합니다. 아래 문서등에서는 따로 명시적으로 관련 설명이 된 부분은 아직까진 찾지는 못하였습니다.. https://github.com/microsoft/pyright https://www.python.org/dev/peps/pep-0544/ https://github.com/microsoft/pyright/blob/main/docs/type-concepts.md 실행환경은 아래와 같습니다. pyright 1.1.215 python 3.9.1 mypy 0.931 아래는 pyright 를 함께 사용하여 실행 가능한 전체 실행 코드 입니다. from typing import Generic, Optional, Union, TypeVar ARM = TypeVar("ARM") HEAD = TypeVar("HEAD") class Robot(Generic[ARM, HEAD]): def __init__(self, arm: ARM, head: HEAD): self.arm = arm self.head = head def decode(self): decodedValue: Optional[ARM] = None pass def __str__(self): return f"{self.arm} && {self.head}" robot: Robot = Robot[int, int](122432, 343534) robot2: Robot = Robot[str, str]("2323544", "84539232") robot3: Robot = Robot[float, str](345483.135, "249308543") class Siri(Robot[ARM, HEAD]): pass siri1 = Siri[int, int](342323, 9238235) siri2 = Siri[str, int]("9999", 245324) siri3 = Siri[float, str](230845.4523, "12948") print(robot) print(robot2) print(robot3) print(siri1) print(siri2) print(siri3) 그럼 앞으로도 좋은 강의 부탁 드리며 22년 한해 새해 복 많이 받으세요. 감사합니다.
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
which pyhon이 왜 안될까요..?
which python을 입력하면 which : 'which' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + which python + ~~~~~ + CategoryInfo : ObjectNotFound: (which:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException 라는 오류가 발생합니다. 어떻게 해야되나요
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
pyright 에러나서 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 해당 코드를 pyright으로 돌렸을 때 "pointer" is not a known member of "None" (reportOptionalMemberAccess) 에러가 발생합니다. Optional[Node]는 Union[Node, None]과 같은 것으로 이해하였습니다. 그런데 pointer를 Optional[Node]로 타이핑 하였는데도 왜 에러가 발생하는지 이해가 되지 않아 질문 남깁니다. 감사합니다.
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
클래스 변수 관련 질문입니다.
클래스 변수가 클래스 내부에서 정의되는 변수이고, 클래스 이름 뿐만 아니라 인스턴스 이름으로도 접근할 수 있다는 것을 이해했습니다. 하지만 클래스 변수가 어느 시점에 정의되는지 명확하게 이해하지 못했습니다. 인스턴스를 정의할때마다 클래스 변수가 재정의되면, 클래스 변수가 계속해서 초기화되는 것이므로 아닌 것 같고, 클래스 코드가 처음 실행될때 클래스 변수도 같이 정의되는 건가요? 추가적으로 클래스 내부에서 클래스 변수가 정의된 다음 다시 불러올 때 "클래스명.클래스변수"로 사용하던데, 왜 클래스 내부에서도 클래스 변수를 사용할 때 그냥 클래스변수 이름으로는 부르지 못하는 건가요?
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
데코레이터 관련 질문
안녕하세요, 아래와 같이 new_func 없이, func 수행전 print만 추가하는 함수로 copyright 프린트의 목적이 달성될거라 생각하였는데 이렇게 하면,, 데코레이터+함수 정의만 하여도 곧바로 실행이 되고,, smile() 단독 실행시에는 copyright print문이 실행되지 않습니다. new_func와 같은 wrapper로 또 한번 감싼후 wrapper를 리턴해야만 의도대로 실행되는 데코레이터의 원리가 궁금합니다..! 감사합니다 :)
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
venv 로 만든 가상환경은 파이썬 버젼을 변경하기가 어려운 것 같습니다.
뒤에 수업들어보니... 환경설정에 신경쓰지 않아도... 수업진행하는데 문제가 없는 것 같습니다. 아래는 참고만 하시면 될 것 같습니다. ----------- 아래 ----------- venv로 가상환경을 만들면 현제 설치된 파이썬 버젼으로 가상환경이 만들어지고, 파이썬 버젼까지 버젼을 맞추려면 anaconda를 사용하라는 글이 보입니다. python version 현제 설치된 버젼 : Python 3.8.3 강의에서 사용하는 버젼 : Python 3.7.6 (내용이 있는 곳) 패키지 및 버전 관리 conda가 필요한 이유 아나콘다로 파이썬 버젼에 맞게 가상환경을 만드는 방법은 알고 있습니다. 이 방법으로 해야 하나요? 파이참에서 이방법으로 사용할 줄 압니다. 하지만 찾아보면 나올 것 같습니다만 vscode는 잘 모릅니다. ------------------------------------------------------- 아나콘다로 python= 3.7.6 버젼 가상환경 설치후 vscode 에서 ^&P 단축키를 눌러 python interpreter 설정을 아나콘다에서 만든 가상환경 python을 설정해 주었습니다. 그런다음... requirements.txt파일을 pip install -r requirements.txt 명령으로 설치했지만... 에러 발생했습니다. appdirs==1.4.4 black==21.5b1 click==8.0.1 flake8==3.9.2 Flask==2.0.1 importlib-metadata==4.3.1 itsdangerous==2.0.1 Jinja2==3.0.1 MarkupSafe==2.0.1 mccabe==0.6.1 mypy-extensions==0.4.3 pathspec==0.8.1 pycodestyle==2.7.0 pyflakes==2.3.1 regex==2021.1.1 toml==0.10.2 typed-ast==1.4.3 typing-extensions==3.10.0.0 Werkzeug==2.0.1 zipp==3.4.1 requirements.txt파일을 사용하지 않고... 따라하기 하면 될 수 있겠지만... 그냥 안되는 데로 일단 수업 내용부터 보고 나중에 해결하도록 노력하겠습니다.
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
Final로 타이핑한 변수에 list를 넣는다면
list는 mutable하니까 아래처럼 조작해도 별 문제가 없을 듯 합니다. 만약 재할당도 불가능하고(아마 Final을 사용한) 조작도 불가능하게 하고싶다면 어떻게 해야하는지 알 수 있을까요?
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
생성자에서 자기 자신 타이핑 하는 경우
위처럼 default 값을 주면 Optional을 사용하지 않아도 되는거로 보입니다. 어떻게 사용하는게 낫다고 생각하시는지 강사님 의견이 궁금합니다.
- 미해결타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
f"{객체}" 출력값에서의 숫자값과 id(객체)에서의 숫자값의 차이가 무엇인가요??
아래 동그라미 친 두 숫자값의 차이가 궁금합니다. 위는 메모리의 실제 주소이고 아래것은 python 내부적으로 가지고 있는 주소값일까요?