파이썬을 위한 객체지향 프로그래밍 기본 개념 설명
비전공자로써 파이썬을 하며 겪었던 힘든 내용들 중 객체의 핵심 내용 위주로..
우선 다음의 예시를 위한 클래스를 정의해보자
class User:
def say_hello(user):
print(f"안녕하세요! 저는 {user.name}입니다.")
def login(user, my_email, my_password):
if (user.email == my_email and user.password == my_password):
print("로그인 성공")
else:
print("로그인 실패")
유저클래스는 해당 유저의 이름과 로그인 성공 실패 여부를 나타낸다.
인스턴스 메소드의 특별한 규칙
객체 지향 프로그래밍에 대해 정말 아무것도 모르시다면, 매우 간단히 정리해놓은 이전글을 참고하고 오시길..
User.say_hello(user1) # 클래스에서 메소드 호출
user1.say_hello() # 인스턴스에서 메소드를 호출
인스턴스에서 메소드를 호출하면, .(dot)왼쪽이 첫번째 파라미터로 자동으로 들어간다.
만약 이 상태에서 괄호를 빈 채로 놔두지 않고, 파라미터까지 써준다면, 2가지의 parameter를 넘겨준것이나 다름없다.
그러므로 1개의 파라미터를 넘겨줘야 되는데, 2개를 넘겨줬다는 오류가 뜬다.
이는 마치 아래의 에러 코드에서 알 수 있듯, 중복된 파라미터로 기능을 한다.
user1.say_hello(user1) # 에러; 파라미터를 2개 전달받음
User.say_hello(user1, user1) # 위와 동일한 기능
파이썬의 첫번째 파라미터 권장사항
파이썬에서는 인스턴스 메소드의 첫번째 파라미터에 대해 'self'로 써주기를 권장한다.
그런 이유로 대부분의 파이썬 IDE(VScode, Pycharm 등)에서는 클래스 내의 메소드를 입력할 때 자동완성으로 첫 번째 파라미터로 self를 생성한다.
self는 결국 주인공일 것이고, 이것은 가독성도 좋게 만든다.
self를 적용해서 위의 클래스를 새로 정의하였다.
맨 위에서 정의한 클래스와 현재 클래스에서 달라진 내용이 무엇인지 찾아볼 것.
class User:
def say_hello(self):
print(f"안녕하세요! 저는 {self.name}입니다.")
def login(self, my_email, my_password):
if (self.email == my_email and self.password == my_password):
print("로그인 성공")
else:
print("로그인 실패")
인스턴스 변수와 같은 이름을 갖는 파라미터
파라미터로 넘기는 변수 이름이 name인 경우가 있고,
인스턴스 변수가 user.name 이라면, 중복의 문제가 없을까?
class User:
def say_hello(self):
print(f"안녕하세요 {self.name}입니다.")
def check_name(self, name):
return self.name == name
맨 아래 코드를 잘 보면 self.name == name이다.
self.name은 인스턴스 변수를 나타내는 name을 의미하고,
뒤의 name은 파라미터로 받은 name이다.
과연 이 둘은 충돌의 문제가 있지 않을까?
결론적으로, 없다.
'파이썬 & 인공지능 > python' 카테고리의 다른 글
객체 지향 프로그래밍 (0) | 2020.09.22 |
---|---|
파이썬 장고(django) 웹 프레임워크 개념 정리 (0) | 2020.08.20 |