Programming/Python
[Python] 파이썬 클래스(class)에 대해서 알아보자.
빙기때침식곡
2021. 7. 25. 23:36
반응형
오늘은 객체 지향언어의 가장 큰 특징인 클래스(class)의 기본 특징에 대해서 알아보는 시간을 갖겠다.
1. 클래스
(1) 예제1
- 초기화는 __init__ 메서드를 사용한다.
- 아무것도 없는 클래스에서는 pass가 없으면 애러가 난다.
class UserInfo:
def __init__(self, name):
self.name = name
def user_info_p(self):
print("초기화 : ", self.name)
# 네임스페이스
user1 = UserInfo("Yun")
print(user1.name)
user1.user_info_p()
user2 = UserInfo("Park")
print(user2.name)
user2.user_info_p()
# 메모리 주소가 다르다 -> 다른 객체다
print(id(user1))
print(id(user2))
# 네임스페이스
print(user1.__dict__)
print(user2.__dict__)
Result
Yun
초기화 : Yun
Park
초기화 : Park
2440528170960
2440528168512
{'name': 'Yun'}
{'name': 'Park'}
(2) 예제2
- self는 인스턴스 메소드 (객체를 생성하고 사용해야한다.)
- self가 없는 메소드는 클래스 메소드 (클래스명에서 콤마를 찍고 메서드를 사용한다.)
class SelfTest():
def function1():
print('function1 called!')
def function2(self):
print(id(self))
print('function2 called!')
self_test = SelfTest()
SelfTest.function1()
self_test.function2()
print(id(self_test))
SelfTest.function2(self_test)
Result
function1 called!
2440528167744
function2 called!
2440528167744
2440528167744
function2 called!
(3) 예제3
- 클래스 객체의 속성 중 __dict__ 은 클래스의 네임스페이스를 나타낸다.
- self의 property는 새로 할당된 객체에 해당하는 속성이다.
- 클래스명의 property는 그 클래스를 객체로 하는 모든 객체들의 공통 속성이다.
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('Kim')
user2 = WareHouse('Park')
user3 = WareHouse('Lee')
print(user1.__dict__)
print(user2.__dict__)
print(user3.__dict__)
# 클래스 네임스페이스, 클래스 변수(공유)
# 클래스의 공통속성
print(WareHouse.__dict__)
print(user1.name)
print(user2.name)
print(user3.name)
# 자기 namespace에 없으면 class namespace에서 찾는다 거기에도 없으면 애러
print(user1.stock_num)
print(user2.stock_num)
print(user3.stock_num)
del user1
print(user2.stock_num)
print(user3.stock_num)
Result
{'name': 'Kim'}
{'name': 'Park'}
{'name': 'Lee'}
{'__module__': '__main__', 'stock_num': 3, '__init__': <function WareHouse.__init__ at 0x000002383AD07040>, '__del__': <function WareHouse.__del__ at 0x000002383AD070D0>, '__dict__': <attribute '__dict__' of
'WareHouse' objects>, '__weakref__': <attribute '__weakref__' of 'WareHouse' objects>, '__doc__': None}
Kim
Park
Lee
3
3
3
2
2
반응형