[Day4] 파이썬 기초 문법III

2021. 1. 21. 22:45·AI/부스트 캠프 AI tech

[Day4] 파이썬 기초 문법III

  • Python Object Oriented Programming

    • https://n-brogrammer.tistory.com/36
  • Module and Project

    • https://n-brogrammer.tistory.com/37

 

중요

@property

class Person:
    def __init__(self):
        self.age = 0

john=Person()
print(john.age)  # 0
john.age=28
print(john.age)  # 28

파이썬에서 다음과 같이 class를 정의하게 되면 age직접 접근하여 값을 바꿀 수 있다. 이게 문제가 된다.

 

왜냐하면 클래스를 만들고 변수를 바꿀 때 보통 함수를 통해서 변수를 바꾼다. 이유는 변수의 조건 등을 줄 수 있기 때문이다. age의 값을 바꿀 때 사용자가 정수의 값이 아닌 문자열 값을 넣는다면, error문구를 내보내야 한다.

class Person:
    def __init__(self):
        self.age = 0
        
    def set_age(self,val):
        if type(val) == int:
            self.age=val
        else:
            print('숫자 값을 입력해 주세요!!')
            
john=Person()
john.set_age('seven')  # 숫자 값을 입력해 주세요!!
john.set_age(28)
print(john.age)        # 28
john.age='seven'
print(john.age)        # 'seven'

여기서 직접 접근하여 값을 바꿀 수 있다면 age의 값은 'seven'으로 바뀔 수 있고 이것은 class구조가 이상해 질 수 있다.

 

이렇게 직접 접근을 막기 위해 변수 앞에__을 붙여 준다.

class Person:
    def __init__(self):
        self.__age = 0

john=Person()
print(john.__age)    # error발생 직접 접근 불가

 

클래스에서 메서드를 통하여 속성의 값을 가져오거나 저장하는 경우. 값을 가져오는 메서드를 getter, 값을 저장하는 메서드를 setter로 부른다.

class Person:
    def __init__(self):
        self.__age = 0
 
    def get_age(self):           # getter
        return self.__age
    
    def set_age(self, val):      # setter
        if type(val) == int:
            self.__age = val
        else:
            print('숫자 값을 입력해 주세요!!')

john=Person()
john.set_age('str')    # 숫자 값을 입력해 주세요!!
john.set_age(20)
print(john.get_age())  # 20

이렇게 함수를 통해서 접근하게 되는데 @property를 사용하면 getter, setter를 간단하게 구현할 수 있습니다.

  • @property
  • @메서드이름.setter
class Person:
    def __init__(self):
        self.__age = 0
 
    @property
    def age(self):           # getter
        return self.__age
 
    @age.setter
    def age(self, val):    # setter
        if type(val) == int:
            self.__age = val
        else:
            print('숫자 값을 입력해 주세요!!')

john=Person()
john.age='seven'     # 숫자 값을 입력해 주세요!!
print(john.age)      # 0
john.age=20
print(john.age)      # 20

getter, setter 메서드의 이름을 잘 보면 둘다 age이다. 그리고 getter에는 @property가 붙어있고, setter에는 @age.setter가 붙어있다. 즉, 값을 가져오는 메서드에는 @property 데코레이터를 붙이고, 값을 저장하는 메서드에는 @메서드이름.setter 데코레이터를 붙이는 방식이다. 변수에 직접 접근하는 것 처럼 보이지만 실제로는 변수에 직접 접근하고 있지 않다는 것을 john.age='seven'이 숫자 값을 입력해 주세요!!! 구문을 출력한 걸 보면 알 수 있다.

 

 

피어세션

  • 파이썬 디버깅 : pythontutor

  • try - except를 생활화

  • Git을 과제에 적용

    1. Git을 통한 협업 연습
    2. 멋진(효율적이고 깔끔) 코드 제작

 

 

과제

정규표현식

정규표현식에서 메타 문자가 존재하는데 []안에 메타 문자를 넣으려면 다음과 같은 메타 문자는 \를 붙어 줘야한다.

import re
special_chr=re.compile('[문자열]')

여기서 문자열에 메타 문자를 넣게 되면 \를 넣어서 표현 해 주어야 한다. \, [,], .,*,+,{,},?,|,^,$로 총 12개가 메타 문자이다. is_validated_english_sentence함수를 만들때 특수 문자를 체크하는 부분에서 사용.

'AI > 부스트 캠프 AI tech' 카테고리의 다른 글

[Day9] Pandas II,확률론  (0) 2021.01.28
[Day8] Pandas I,딥러닝 학습방법 이해하기  (0) 2021.01.27
[Day7] 경사하강법  (0) 2021.01.26
[Day6] Numpy/벡터/행렬  (0) 2021.01.25
[Day 5] 파이썬으로 데이터 다루기  (0) 2021.01.22
[Day3] 파이썬 기초 문법II  (0) 2021.01.20
[Day 2] 파이썬 기초 문법  (0) 2021.01.19
파이썬/AI 개발환경 준비  (0) 2021.01.18
'AI/부스트 캠프 AI tech' 카테고리의 다른 글
  • [Day6] Numpy/벡터/행렬
  • [Day 5] 파이썬으로 데이터 다루기
  • [Day3] 파이썬 기초 문법II
  • [Day 2] 파이썬 기초 문법
N-analyst
N-analyst
  • N-analyst
    개발자CuCu
    N-analyst
  • 전체
    오늘
    어제
  • 공지사항

    • 티스토리에서 원하는 글 찾는 방법
    • 분류 전체보기 (140)
      • 티스토리 (4)
      • 알고리즘 (5)
        • 알고리즘 정리 (1)
        • 백준 (4)
      • 마크다운(Typora) (13)
        • 사용법 (13)
      • 에러 (1)
        • 파이썬 (1)
      • 데이터 분석 (5)
        • python_analysis (3)
        • Machine Learning (2)
      • AI (109)
        • 파이토치로 시작하는 딥러닝 기초 (2)
        • 부스트 캠프 AI tech (41)
        • 이론 (66)
      • 파이썬(python) (1)
        • 기타 (1)
      • 웹 프로그래밍 (1)
        • 설정 팁 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.6
N-analyst
[Day4] 파이썬 기초 문법III
상단으로

티스토리툴바