2022.05.24 - [개발/Python] - [Python] 클래스 2 / 예제로 공부하는 Python 100 문제풀이
[Python] 클래스 2 / 예제로 공부하는 Python 100 문제풀이
2022.05.17 - [개발/Python] - [Python] 클래스 / 예제로 공부하는 Python 100 문제풀이 [Python] 클래스 / 예제로 공부하는 Python 100 문제풀이 클래스는 파이썬을 OOP로서의 기능을 사용하게 해주는 도구이다...
baby-dev.tistory.com
이전 글에 이어서 진행한다.
1. 특별한 메서드
특별한 메서드는 __init__, __del__ 처럼
__ (언더바) 2개를 앞 뒤로 써주면 된다.
class Person2: def __init__(self, name, age): self.name = name self.age = age def print_info(self): print(self.name, ", ", self.age) p2 = Person2('kim', 27) p2.print_info() p3 = Person2('hong', 19) p3.print_info() ''' kim , 27 hong , 19 ''' #위에 반드시 __init__을 붙여줘야한다. __init__은 특별한 생성자
기존에는 create_info(self, name, age)를 이용해서
p2.create_info('kim', 27) 이런 식으로 사용했다면
__init__ 을 이용하면 클래스 선언과 동시에 같이 넣어준 파라미터를 이용해 초기화가 가능하다.
비슷한 사용으로 소멸자가 있다.
소멸자는 생성한 객체를 지워주는 것으로 소멸자를 이용해서 소멸한 이후 같은 변수명을 선언하면 에러가 발생한다.
#소멸자 #생성자는 __init__ 소멸자는 __del__ class SmartPhone: #생성자 def __init__(self, name, price): self.name = name self.price = price print(self.name+" 객체 생성") print("-"*40) print(self.name+"스마트폰의 가격은 "+str(self.price)+"원 입니다") print("-"*40) #소멸자 def __del__(self): print(self.name+" 객체 소멸") s1 = SmartPhone("Apple", 1000000) del s1 ''' Apple 객체 생성 ---------------------------------------- Apple스마트폰의 가격은 1000000원 입니다 ---------------------------------------- Apple 객체 소멸 '''
클래스 내에서 __del__ 을 이용해 생성해주고
사용은 del [객체명] 을 이용해 소멸시켜준다.
2. 외부 호출 메서드
#클래스 메서드 안에서 다른 메서드 호출 class Test: def a_method(self): print("a_method create") def b_method(self): self.a_method() #self사용해서 a_method호출 t1 = Test() t1.a_method() t1.b_method() ''' a_method create a_method create '''
위는 클래스 안에 있는 각각 다른 메서드를 통해서 호출하는 방법이다.
t1.a_method()는 자신을 호출했고
t1.b_method()는 내부에서 self.a_method()를 통해 a_method를 호출했다.
#만약 위의 b_method에서 self.a_method의 self를 지우면 외부의 a_method 가르킴 class Test2: def a_method2(self): print("a_method create") def b_method2(self): a_method2() #self사용해서 a_method호출 def a_method2(): print("클래스 외부에 정의된 a_method") t2 = Test2() t2.a_method2() t2.b_method2() ''' a_method create 클래스 외부에 정의된 a_method '''
이는 위와 다르게
클래스 내부에 선언된 것이 아닌 클래스 외부에 def a_method2라는 동일한 이름의 메서드를 생성한 것이다.
t2.b_method()로 a_method2()를 호출하자
밖에 있는 a_method2를 호출했는데
이는 앞서 self가 빠졌기 때문이다.
3. 변수 변경
#클래스 변수 class Test3: a_var = 0 def a_method3(self): Test3.a_var = 6000 def b_method3(self): self.a_var = 300 print("1. 초기값 : ", Test3.a_var) #1. 초기값 : 0 Test3.a_var = 3000 print("2. 변경", Test3.a_var) #2. 변경 3000 t3 = Test3() t3.a_method3() print("3 클래스 내 메서드 호출로 변경", Test3.a_var) #3 클래스 내 메서드 호출로 변경 6000 #print(Test3.a_method3()) #직접 호출은 에러 발생

뭐.. 이렇다...
그림이 더 어려운 것 같다...
근데 변수를 사용할 때
self 혹은 클래스명을 조심해서 사용해야 한다.
잘못 사용하는 경우 값이 변하지 않는 경우가 발생할 수 있다.
#값이 변경 안되는 경우 class Test4: var_4 = 0 def method_4(self): self.var_4 = 300 print("초기값 : ", Test4.var_4) t4 = Test4() t4.method_4() print("4. 300으로 변경", Test4.var_4) #변경안된 앞의 값인 0 출력됨 #method_4 의 self.var_4 를 사용했기 때문에 값 변경이 안됨 #t4 에는 300이 저장됨 print("check : ", t4.var_4) # check : 300 #혹은 위의 self.var_4를 Test4.var_4로 변경

4. 인스턴스 유무 확인
#특정 클래스의 인스턴스 유무 확인 -> isinstance( [인스턴스 객체명], [클래스명] ) class Test5: pass class Test6: pass t5 = Test5() result = isinstance(t5, Test5) print("Test5 클래스의 인스턴스 객체가 맞는가?", result) #True result2 = isinstance(t5, Test6) print("Test6 클래스의 인스턴스 객체가 맞는가?", result2) #False
사용법은 간단하다.
isinstance( [인스턴스 객체명], [클래스명] )
을 넣어주면
True, False를 반환한다.
5. 객체의 개수
#객체의 개수 class Test7: count = 0 def __init__(self, name, age): self.name = name self.age = age self.increase_obj() def increase_obj(self): Test7.count += 1 t7 = Test7('kim', 20) print('count - ', Test7.count) #count - 1
어렵지 않다.
객체를 선언할 때마다 지정된 count값을 추가하면 된다.
'Language > Python' 카테고리의 다른 글
[Python] print() 정리 및 예제 (0) | 2022.08.05 |
---|---|
[Python] TypeError: 'list' object is not callable 에러 (1) | 2022.07.19 |
[Python] 클래스 2 / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.05.24 |
[Python] 클래스 / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.05.17 |
[Python] 랜덤 모듈 / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.05.17 |
댓글