| # Chapter06_01 |
| # 클래스 (ㅋㅋ붕어빵기계) |
| # OOP(객체 지향 프로그래밍), self, 인스턴스 메소드, 인스턴스 변수 |
| |
| |
| # 클래스와 and 인스턴스의 차이를 이해하는 것이 중요 |
| # 네임스페이스 : 객체를 인스턴스화 할 때 저장된 공간 |
| # 클래스 변수 : 직접 접근 가능, 공유 (정수기! 공용화장실! 같은 것 ㅋㅋ) |
| # 인스턴스 변수 : 객체마다 별도 존재. |
| |
| # 예제1) |
| # class dog():, class dog:, class(object): |
| class dog(): #object 상속 |
| # 클래스 속성 |
| specied = 'firstdog' #클래스 변수. |
| |
| # 초기화/인스턴스 속성 (java생성자) |
| def __init__(self,name, age): |
| self.name = name |
| self.age = age |
| |
| |
| # 클래스 정보 |
| print(dog) |
| |
| # 인스턴스화 (- 코드로 구현해서 메모리에 올라간 시점.) |
| a = dog('happy',15) |
| b = dog('micky',2) |
| c = dog('micky',2) |
| # 비교 |
| print(a == b, id(a), id(b)) |
| print(a == c, id(b), id(c)) |
| |
| # 네임스페이스 |
| print('dog1',a.__dict__) |
| print('dog2',b.__dict__) |
| |
| # 인스턴스 속성 확인 |
| print('{} is {} and {} is {}'.format(a.name, a.age, b.name, b.age)) |
| |
| if a.specied == 'firstdog': |
| print('{0} is a {1}'.format(a.name, a.specied)) |
| |
| print(dog.specied) # 클래스에서도 |
| print(a.specied) # 인스턴스변수에서도 바로 접근 공유 가능하다. (같은값.) |
| |
| |
| # 예제2) - self의 이해. (this같은 느낌인듯) |
| |
| class SelfTest: |
| def func1(): |
| print('func1 called') |
| def func2(self): #__init__이 없어도 알아서 생성해주는 똑쟁이 파이썬.. |
| print(id(self)) #f값. |
| print('func2 called') |
| |
| f = SelfTest() |
| |
| print(dir(f)) #func1과 func2가 있음을 확인 가능 |
| print(id(f)) |
| |
| # f.func1() 에러! 예외. |
| f.func2() # self가 있는 인스턴스 메서드 |
| SelfTest.func1() # 클래스로바로 접근해서 접근. (매개변수가 없는 클래스메소드) |
| # self가 있으면 인스턴스화 시킨 변수가 self로 넘어감. |
| # SelfTest.func2() 반대로 에러! 예외 |
| SelfTest.func2(f) |
| |
| |
| # 예제3) |
| # 클래스 변수, 인스턴스 변수 |
| |
| class Warehouse: |
| #클래스 변수 |
| stock_num = 0 #재고 |
| |
| def __init__(self, name): |
| # 인스턴스 변수 |
| self.name=name |
| Warehouse.stock_num +=1 |
| |
| def __del__(self): |
| Warehouse.stock_num -=1 |
| |
| user1 = Warehouse('Lee') |
| user2 = Warehouse('Jin') |
| |
| print(Warehouse.stock_num) # 붕어빵 몇개구웠어! = 2개 |
| |
| print(user1.name) |
| print(user2.name) |
| print(user1.__dict__) |
| print(user2.__dict__) |
| print('before>>',Warehouse.__dict__) #stock_num:2 |
| |
| del user1 |
| print('after>>',Warehouse.__dict__) |
| |
| # 예제4 |
| |
| class dog2(): |
| specied = 'firstdog' |
| |
| def __init__(self,name, age): |
| self.name = name |
| self.age = age |
| |
| def info(self): |
| return '{} is {} years old'.format(self.name, self.age) |
| |
| def speak(self, sound): |
| return "{} says {}!".format(self.name, sound) |
| |
| # 인스턴스 생성 |
| d = dog2('july',4) |
| e = dog2('merry',10) |
| |
| # 메서드 호출 |
| print(d.info()) |
| print(e.info()) |
| print(d.speak('wal wal')) |
| print(e.speak('mung mung')) |