23.02.02 Day 04

오윤범·2023년 2월 2일
0

Python

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
생성자 생성
차 번호는 158117 입니다.     
차 번호는 158117 입니다. 

--> 변수 앞에 __(로우바2개) 같이 선언하여 캡슐화 시키면 외부에서 직접 접근이 불가함
위 소스코드와 같이 mycar로 접근하여 number을 변경하여도 출력에는 변화가 없음을 확인

  • 캡슐화되어있는 변수에 접근하고자 할 때

def set_number(self,number):
        self.__number=number
--------------------구분-----------------------
yourcar=Car('88호 7777')
print(yourcar)
yourcar.set_number('99호 9999')
print(yourcar)
--------------------출력-----------------------
--------------------출력-----------------------
차 번호는 887777 입니다.     
차 번호는 999999 입니다.

--> 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
생성자 생성
차 번호는 158117 입니다.   
생성자 생성
차 번호는 887777 입니다.   
차 번호는 999999 입니다.
3.141592653589793
출력 : 이름은 김김김, 성별은 M
생성자 생성
차 번호는 158117 입니다.

--> 어떤 순서로 다음과 같이 출력되었는지 확인 필요할듯

0개의 댓글