PIP(Pip Installs Packages)
파이썬 패키지 관리자라고 하며 Python Package Index(PyPI) 저장소로 부터 파이썬 패키지를 받아 설치하는 관리도구.
Node.js의 npm과 유사하고, C#에서는 NuGet 패키지와 같은 역할을 함.
pip - 하나의 명령어라고 생각
venv(가상환경 설치 및 설정)
- 가상환경이란 ?
가상환경은 개발자가 필요한 개발영역마다 파이썬 실행을 위한 가상의 환경을 다시 재창조하는 것으로 위의 문제들을 한번에 해결할 수 있는 먼치킨.- cmd - cd C:\Source\Python2023 - pip install virtualenv - virtualenv venv
-> virtualenv 설치 할 때 github desktop의 show in Explorer로 파일 탐색기 위치에
pip install 통해서 설치 해야함- vsc - 터미널 - cd venv - cd .\Scripts\ - 여기까지 해두고 powershell 관리자로 실행
-Set-ExecutionPolicy -ExecutionPolicy RemoteSigned 입력 - Y + enter - 다시 vsc로 돌아와서 .\activate.ps1 - python - import sys - sys.executable- 터미널에 (venv) PS C:\Source\Python2023> 의 형태로 떠있을 때 pip install django를 통해서 venv라는 폴더에 독립적으로 django가 구축되어있음을 확인
- 가상환경 종료 원할 때 그냥 터미널 껐다가 키면 됨 (터미널 껐다 켰는데도 가상환경 구축되어 있으면 diactivate로 나갈 수 있다고 함)
Class
객체 : 변수와 함수의 집합
Class와 Self는 같이 쓰이는 정형 구문이라고 생각 (세트)
class Person: name='익명' height='?' gender='?' blood_type='?' def walk(self): #def walk() 로 생성하면 실행 시 오류 print(f'{self.name}이 걷는중') def run(self,option): if option=='fast': #print(f'{self.name}이 빨리 뛰는중') print('{0}이 빨리 뛰는중'.format(self.name)) #위 주석과 같은의미 else: print(f'{self.name}이 천천히 뛰는중') def stop(self): print(f'{self.name}이 멈춤') yb=Person() #인스턴스 생성 yb.name='오윤범' yb.height='174cm' yb.gender='M' yb.blood_type='A' print(f'{yb.name}의 키:{yb.height} 성별:{yb.gender}') yb.walk() yb.stop() yb.run('fast') yb.run('slow') --------------------출력----------------------- --------------------출력----------------------- 오윤범의 키:174cm 성별:M 오윤범이 걷는중 오윤범이 멈춤 오윤범이 빨리 뛰는중 오윤범이 천천히 뛰는중
--> Class내에 함수 생성 시 self가 꼭 필요함 (처음알았네;)
__init(생성자)
def __init__(self) -> None: pass --------------------구분----------------------- 기본 생성자 생성 --> def__init 까지 치고 tab
Python의 Class 기본생성자 --> __init 꼴
생성자 작성 및 기본값 설정
class Person: def __init__(self,name='익명',height='?',gender='?',blood_type='?') -> None: #생성자,초기화,파라미터에 기본값 지정 self.name=name self.height=height self.gender=gender self.blood_type=blood_type def walk(self): #def walk() 로 생성하면 실행 시 오류 print(f'{self.name}이 걷는중') def run(self,option): if option=='fast': #print(f'{self.name}이 빨리 뛰는중') print('{0}이 빨리 뛰는중'.format(self.name)) #위 주석과 같은의미 else: print(f'{self.name}이 천천히 뛰는중') def stop(self): print(f'{self.name}이 멈춤') def show(self): print(f'이름:{self.name}\n키:{self.height}\n성별:{self.gender}\n혈액형:{self.blood_type}\n================') # 1. 초기화 후 객체생성 yb1=Person('윤범','178cm','M','A') yb1.show() yb1.walk() yb1.run('fast') yb1.run('slow') yb1.stop() --------------------출력----------------------- --------------------출력----------------------- 이름:윤범 키:178cm 성별:M 혈액형:A ================ 윤범이 걷는중 윤범이 빨리 뛰는중 윤범이 천천히 뛰는중 윤범이 멈춤
--> Python에서 Class 및 함수 생성 기본꼴이겠다
__str(Magic Method)
def __str__(self) -> str: return f'출력 : 이름은 {self.name}, 성별은 {self.gender}' --------------------출력----------------------- --------------------출력----------------------- 출력 : 이름은 오윤범, 성별은 M
--> #2. 생성자 외 매직메서드(Function) str --> print(객체) 했을 때 나오게 하는 기본 꼴
즉 전형적으로 정보를 보여주는 함수인 show의 역할을 print(객체) 했을 때 그대로 출력 될 수 있게함
캡슐화
class Car: __number='15더 8117' def get_number(self): return self.__number def __init__(self) -> None: print('생성자 생성') def __new__(cls): print('new') return super().__new__(cls) #부모 def __str__(self) -> str: return f'차 번호는 {self.__number} 입니다.' mycar = Car() print(mycar) mycar.__number='123더 4567' print(mycar) --------------------출력----------------------- --------------------출력----------------------- new 생성자 생성 차 번호는 15더 8117 입니다. 차 번호는 15더 8117 입니다.
--> 변수 앞에 __(로우바2개) 같이 선언하여 캡슐화 시키면 외부에서 직접 접근이 불가함
위 소스코드와 같이 mycar로 접근하여 number을 변경하여도 출력에는 변화가 없음을 확인
캡슐화되어있는 변수에 접근하고자 할 때
def set_number(self,number): self.__number=number --------------------구분----------------------- yourcar=Car('88호 7777') print(yourcar) yourcar.set_number('99호 9999') print(yourcar) --------------------출력----------------------- --------------------출력----------------------- 차 번호는 88호 7777 입니다. 차 번호는 99호 9999 입니다.
--> set_number라는 함수를 정의하지 않고 yourcar.__number을 통해 직접 값을 변경하려고 하면 불가능하지만, set_number 함수 작성 이후에 number에 접근하여 변경하는것은 가능함
module
import math as m print(m.pi) --------------------출력----------------------- --------------------출력----------------------- 3.141592653589793
import module
import math as m #클래스화 안된 모듈 import code22_person as p #우리가 만든 클래스 from code23_car import Car #code23_car.py 파일의 Car클래스만 뽑아와서 사용 print(m.pi) # 만든 모듈 사용 Me=p.Person('김김김',188,'M','AB') print(Me) mycar=Car() print(mycar) --------------------출력----------------------- --------------------출력----------------------- 이름:오윤범 키:178cm 성별:M 혈액형:A ================ 오윤범이 걷는중 오윤범이 빨리 뛰는중 오윤범이 천천히 뛰는중 오윤범이 멈춤 출력 : 이름은 오윤범, 성별은 M 생성자 생성 차 번호는 15더 8117 입니다. 생성자 생성 차 번호는 88호 7777 입니다. 차 번호는 99호 9999 입니다. 3.141592653589793 출력 : 이름은 김김김, 성별은 M 생성자 생성 차 번호는 15더 8117 입니다.
--> 어떤 순서로 다음과 같이 출력되었는지 확인 필요할듯