Programming/Python

[Python] 파이썬 클래스(class)에 대해서 알아보자.

빙기때침식곡 2021. 7. 25. 23:36
반응형

이미지 출처 www.python.org

 

오늘은 객체 지향언어의 가장 큰 특징인 클래스(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

 

반응형