5/10 Today I Learned

boks·2024년 5월 10일
post-thumbnail

📖 학습한 내용

  • 클래스
  • conda
  • 모듈 생성 (jupyter lab)

📖 핵심내용

📌class

  • 똑같은 무언가를 계속 만들어 낼 수 있는 설계도면
  • 클래스 내부에 매서드를 쉽게 사용할 수 있다.

클래스 생성 및 실행

  • 예시
# 연산할 숫자 지정하기
class FourCal:
  def setdata(self, first, second): # self는 FourCal 자기자신을 받음. 보통 암묵적인 룰이므로 쓰임
    self.first = first
    self.second = second
    
    
a = FourCal() # 클래스 객체 생성 
a.setdata(4,2) # 클래스 내부 매서드 호출
a.first , a.second # 할당된 값 확인

생성자 (init)

  • 위의 예시와 다르게 호출하며 클래스에 값을 넣어주지 않으면 에러발생
  • 예시 - 사칙연산 클래스
class FourCal:
  def __init__(self, first, second): # self는 FourCal 자기자신을 받음. 보통 암묵적인 룰이므로 쓰임
    self.first = first
    self.second = second

  def add(self):
    result = self.first + self.second
    return result

  def mul(self):
    result = self.first * self.second
    return result

  def sub(self):
    result = self.first - self.second
    return result

  def div(self):
   result = self.first / self.second
   return result
   
a = FourCal(4,2) # 호출하면서 값을 바로 넣었다 (4,2)
a.first, a.second


-> 변수가 함수 밖으로 나와도 값을 유지하는 것을 알 수 있다.

a.add(), a.mul(), a.sub(), a.div()


-> 받은 값으로 객체에 개산

클래스의 상속

  • 형태
    class 새클래스명(상속받을 클래스명):
  • 어떤 클래스를 이용하려하지만, 클래스를 변경할 수 없을때 사용
  • 예시 - 위의 FourCal 을 부모객체로 사용
class MoreFourCal(FourCal): # FourCal의 기능화 변수를 그대로 받음
  def pow(self):
    result = self.first * self.second
    return result
    
a = MoreFourCal(4,2) #MoreFourCal 객체 생성
a.pow() # 매서드로 계산

매소드 오버라이팅

  • 부모 클래서(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는것
  • 부모클래스 내의 매서드와, 자식 클래스안에 매서드의 이름이 같다면, 자식 매서드를 실행한다.
  • 예시
class FourCal:
  def __init__(self, first, second): # self는 FourCal 자기자신을 받음. 보통 암묵적인 룰이므로 쓰임
    self.first = first
    self.second = second

  def add(self):
    result = self.first + self.second
    return result

  def mul(self):
    result = self.first * self.second
    return result

  def sub(self):
    result = self.first - self.second
    return result

  def div(self):
   result = self.first / self.second
   return result
   
   
class SafeFourCal(FourCal):
  def div(self):
    if self.second ==0:
     return 0
    else :
     return self.first/self.second
a = FourCal(4,0)
a.div()


-> 나누기 오류. 나누는 수가 0이므로 부모클래스에서 오류 발생

b = SafeFourCal(4,0)
b.div()


-> div() 매서드가 중복되어 있으므로, 자식매서드로 실행하여 0 출력

📌conda

  • 가상환경을 만들어서, 다른 버전의 라이브러리와 같은 다른 세팅과 부딪히지 않는 작업환경을 생성

가상환경 명령어

  • 가상환경 만들기
    conda create --name 가상환경이름 python=원하는버젼

  • 가상환경 지우기
    conda env remove --name 가상환경이름

  • 패키지 설치하기
    conda install 설치1, 설치2

  • 패키지 지우기
    conda env remove 가상환경이름

  • conda 가상환경 활성화
    conda activate 가상환경이름

  • conda 가상환경 비활성화
    conda deactivate

  • conda 가상환경 내보내기

  1. base환경에서 명령어 실행
    conda env export > 원하는이름.yml

기타 명령어

  • conda정보확인
conda --version
conda --help
conda info
  • conda 패키지 업데이트
conda update --all
conda clean --all

📌모듈 만들기

  • 표준 모듈은 파이썬에 기본적으로 내장되어 있는 모듈
  • 외부 모듈은 다른 사람들이 만들어 공개한 모듈
  • 함수나 클래스 같이 여러번 꺼내서 쓰기 좋은 것들을 .py파일형태로 저장하여, 원할때 꺼내쓴다.

만드는 방법

  1. 모듈명.py 파일 생성
  2. 파일 내에 원하는 함수 코딩
  3. 원하는 곳에 호출하기 위해 임포트
    import 모듈 이름
  4. 모듈안의 함수 사용
    모듈이름.함수명()

📖 흥미로운 점 / 새로 알게된 점

if __name == "main__"

잘 이해가 되지 않아서 찾아보았다.'인터프리터에서 직접 실행된 경우'에만, if문 이하의 코드를 돌리라는 명령이다. 만드는 이유는 강사님 말대로 실행되는지 실험해보는 것이였다.

jupyter lab 꿀 단축키

  • 아래의 단축키를 알고 항상 복사하고 붙여 넣은 뒤 셀을 삭제했는데, 그럴 필요가 없어졌다.
    1) 셀 합치기 : shift + m (shift + 방향키로 셀들을 묶고)
    2) 셀 나누기 : 나누고 싶은 줄로 이동 후에 ctrl + shift + -

프롬프트 단축키

1) 프롬프트 화면을 클리어 : cls
2) 프로그램 실행 중이라서, 입력 바가 없을 때 나타내기 : Ctr + c 연타

📖 어려운 부분

  • 클래스를 이해하기가 어려웠다. 함수 같은 것도 아니고, 생소하게 __init__ 이런식으로 작성되어있었다. 이렇게 생성자의 개념에 대해서 알기 어려워서 강사님한테 물어봤다.
    # 질문
    init이 생성자고, 생성자는 클래스 괄호 안에 값을 바로 넣어도 작동하게 해주는 역할인건지?
    # 답
    # 생성자가 맞고, 생성자가 있으면 괄호안에 무조건 값을 넣어야만 작동을 한다.

-> 이 문답을 통해서 생성자가 없을때는 클래스를 호출하고, 클래스를 사용하기 위해서는 해당하는 매서드를 객체에 호출하고 값을 넣은 뒤 사용한다는 것을 알았다. 그리고 그 이유는 클래스 안에서 쓰이는 변수에 값을 지정해줘야하기 때문인 사실도 알았다.

📖 이후 학습 계획

  • AI 모델링에 필요한 Python (Numpy)
  • AI 모델링에 필요한 Python (Pandas)
  • AI 모델링에 필요한 Python (OpenCV)
  • AI 모델링에 필요한 Python (SK-learn)

📖 기타

미니퀴즈

  • 원의 겉넓이와 부피를 계산하는 클래스를 만들어보시오.
필수 매개변수 : 반지름
기능
원의 겉넓이 계산
원의 부피 계산

👉 해결한 코드

class circle:
  def __init__(self, r):
    self.r = r
  def area(self):
    result = self.r * 2 * 3.14
    return result

  def vol(self):
    result = self.r ** 2 * 3.14
    return result
    
a= circle(10)
print(a.area())
print(a.vol())     

👉 시간이 남아서 같은 내용을 변수명만 다르게 해봄

# 똑같은데 실험해봄
class circle:
  def set_one(self, r): # __init__ 말고 다른 명칭으로 하면 지정해서 따로 넣어줘야함
    self.j = r  # 매개변수 지정할때 받은값 r을 할당해줘야한다.

  def area(self):
    result = self.j * 2 * 3.14
    return result

  def vol(self):
    result = self.j ** 2 * 3.14
    return result


a= circle() #생성자가 없으므로 괄호 안에 값을 넣으면 오류가난다.
a.set_one(10) # 생성자가 없으므로 매서드를 지정해주고 값을 줘야한다.
print(a.area())
print(a.vol())


-> 생성자가 있으면 번거롭지 않고, 쉽게 매서드를 사용할 수 있다. 생성자가 없으면 호출한번하고, 값을 한번 더 넣어줘야하기 때문
또한 입력된 매개변수가 함수 내부에서 사용되기 때문에 첫 매서드는 없으면 안되는 것을 알았다.

profile
설계엔지니어의 변신

0개의 댓글