파이썬 클래스 이해하기-2 파이썬을 활용한 금융 데이터 분석 기초 및 심화 과정 1 1
클래스 변수 vs. 인스턴스 변수 클래스 변수(Class Variable) 인스턴스 변수(Instance Variable) self가 안 붙음 클래스 이름을 통해 접근 인스턴스 변수(Instance Variable) self가 붙음 인스턴스 이름을 통해 접근
클래스 변수 사용 예 은행 계좌 클래스 생성자에서 고객 이름을 받음 계좌가 생성될 때 전체 계좌수가 1 증가 계좌가 삭제될 때 전체 계좌수가 1 감소 >>> class Account: num_accounts = 0 def __init__(self, name): self.name = name Account.num_accounts += 1 def __del__(self): Account.num_accounts -= 1 >>>
Account 클래스 인스턴스 생성 객체의 소유자 정보 확인 >>> class Account: num_accounts = 0 def __init__(self, name): self.name = name Account.num_accounts += 1 def __del__(self): Account.num_accounts -= 1 >>> >>> kim = Account("kim") >>> lee = Account("lee") >>> >>> kim.name 'kim' >>> lee.name 'lee' >>>
Account 클래스 은행의 총 계좌 수 >>> kim.num_accounts 2 Account (class object) {‘num_accounts’:2} >>> kim.num_accounts 2 >>> Account.num_accounts >>> kim (instance) lee (instance) {‘name’:’kim’} {‘name’:’lee’} kim.num_account에서 먼저 인스턴스의 네임 스페이스에서 num_account를 찾았지만, 해당 이름이 없어서 클래스의 네임 스페이스로 이동한 후 다시 해당 이름을 찾았고 그 값이 리턴된 것을 아실 것입니다.
클래스 변수의 역할 여러 인스턴스 간에 서로 공유되어야 하는 값들은 클래스 변수를 통해 바인딩 파이썬은 인스턴스의 네임 스페이스에 없는 이름은 클래스의 네임 스페이스에서 찾아보기 때문에 이러한 특성을 이용하면 클래스의 변수가 모든 인스턴스에 공유될 수 있기 때문
클래스 상속 상속 객체 지향 프로그래밍에서는 클래스를 통한 상속 기능을 지원함 상속이란 사람이 사망함에 따라 사망자의 재산 및 신분상의 지위에 대한 포괄적인 승계를 의미 드라마에서 보면 부모님으로부터 많은 재산을 상속받은 사람들을 종종 볼 수 있지요? 객체 지향 프로그래밍에서는 클래스를 통한 상속 기능을 지원함 자식이 부모님으로부터 재산 등을 상속받는 것처럼 다른 클래스에 구현된 메소드나 속성값들을 상속받는 클래스에서 그대로 사용할 수 있음 클래스의 상속을 또 다른 관점에서 생각을 해보면 클래스를 상속한다는 것은 부모 클래스의 능력을 그대로 전달받는 것을 의미 인간으로 치면 부모로부터 유전형질을 물려받아 부모의 능력도 그대로 물려 받는 것과 비슷함
노래 잘 부르는 부모 클래스 노래 잘 부르는 부모 클래스 정의 인스턴스 생성 및 메서드 호출 >>> class Parent: def can_sing(self): print("Sing a song") >>> >>> father = Parent() >>> father.can_sing() Sing a song >>>
운이 좋은 자식 클래스 노래 잘 부르는 부모 클래스를 부모로 둔 자식 클래스 인스턴스 생성 자기 자신은 아무 능력이 없음 (pass keyword) 인스턴스 생성 >>> class LuckyChild(Parent): pass >>> >>> child1 = LuckyChild() >>> child1.can_sing() Sing a song >>>
운이 좋지 않은 자식 클래스 평범한 부모를 둔 자신 클래스 인스턴스 생성 자신은 역시 아무 능력이 없음 >>> class UnLuckyChild: pass >>> >>> child2 = UnLuckyChild() >>> child2.can_sing() Traceback (most recent call last): File "<pyshell#53>", line 1, in <module> child2.can_sing() AttributeError: 'UnLuckyChild' object has no attribute 'can_sing' >>>
운이 좋은 자식 클래스2 노래는 타고 났으나 춤은 스스로 노력해서… 춤과 노래 둘다 할 수 있어요! >>> class LuckyChild2(Parent): def can_dance(self): print("Shuffle Dance") >>> >>> child2 = LuckyChild2() >>> child2.can_sing() Sing a song >>> child2.can_dance() Shuffle Dance >>>
상속의 장점 물론 굳이 상속이라는 기능을 사용하지 않고도 부모 클래스에 구현된 메소드들을 그대로 복사하여 새로 정의할 클래스에 코드를 붙여넣기 해서 사용할 수도 있음 단, 이렇게 하게 되면 같은 기능을 하는 코드가 중복적으로 발생하기 때문에 코드를 관리하기가 어렵고 복사 및 붙여넣기를 해야 하므로 불편함 이에 반해 클래스의 상속이라는 기능을 사용하면 아주 쉽게 최소한의 코드로도 부모 클래스에 잘 구현된 메소드들을 바로 이용할 수 있음
연습 문제 문제-1
연습 문제 문제-2 문제-1의 코드에서 추가로 아래의 코드를 수행했을 때 ‘???’로 표시된 부분의 결괏값을 적어보세요.
연습 문제 문제-3 문제-1, 문제-2의 코드가 모두 수행된 후의 Stock 클래스, a 인스턴스, b 인스턴스의 네임스페이스를 그림으로 표현하세요.
연습 문제 문제-4 Car 클래스를 정의하세요. Property/Method Name Description Property maker 제조사 model 모델명 year 제조년 month 제조월 kilo 주행거리 Method increase_kilometer(kilo) 주행거리 증가
연습 문제 문제-5 이름(name), 학년 (grade), 전공 (major), 토익 점수 (toeic)의 속성을 갖는 Student 클래스를 정의하라. 메서드는 생성자(__init__), set_name, set_grade, set_major, set_toeic, get_name, get_grade, get_major, get_toeic이 있다. 임의의 객체를 생성한 후 데이터를 입력하고 출력하라.
연습 문제 풀이 문제-1
연습 문제 풀이 문제-2
연습 문제 풀이 문제-3
연습 문제 풀이 문제-4 class Car: def __init__(self, maker, model, year, month, kilo): self.maker = maker self.model = model self.year = year self.month = month self.kilo = kilo def increase_kilometer(self, kilo): self.kilo += kilo
연습 문제 풀이 문제-5 s1 = Student("Minsu Kim", 1, "computer eng.", 700) s2 = Student("Jua Park", 2, "Economics", 800) print(s1.get_name(), s1.get_major()) print(s2.get_name(), s2.get_major()) 연습 문제 풀이 문제-5 class Student: def __init__(self, name, grade, major, toeic): self.name = name self.grade = grade self.major = major self.toeic = toeic def set_name(self, name): def set_grade(self, grade): def set_major(self, major): def set_toeic(self, toeic): self.toeic = toeic def get_name(self): return self.name def get_grade(self): return self.grade def get_major(self): return self.major def get_toeic(self): return self.toeic