관리 메뉴

웹개발자의 기지개

[Python] 클래스2 - 클래스변수, 인스턴스 변수 본문

python/파이썬 교육

[Python] 클래스2 - 클래스변수, 인스턴스 변수

http://portfolio.wonpaper.net 2021. 5. 5. 11:27

* 가상환경 설정하기

python3 -m venv 폴더명

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class UserInfo:
    # 속성, 메소드    
#    def __init__(self, name, height, weight, address):
    def __init__(self, name):
        self.name = name
        #print("초기화 ", name)
 
    def user_info_p(self):
        print("Name : "self.name)
 
# 인스턴스 user1 
user1 = UserInfo("Kim")
print(user1.name)
user1.user_info_p()
 
# 인스턴스 user2 
user2 = UserInfo("Park")
print(user2.name)
user2.user_info_p()
 
print()
 
print(id(user1))    # 주소값얻기 - user1 과 user2 는 주소값 서로 다르다.
print(id(user2))
 
print(user1.__dict__)   # 네임스페이스 확인 {'name': 'Kim}
print(user2.__dict__)   # 네임스페이스 확인 {'name': 'Park}
 
cs

 

 

# Self , 클래스, 인스턴스 변수

# 클래스와 인스턴스는 구분된다. 다르다.

# 네임스페이스 : 객체를 인스턴스화 할때 저장된 공간

# 클래스 변수 : 직접 사용 가능, 객체(인스턴스)보다 먼저 생성

# 인스턴스 변수 : 객체마다 별도로 존재한다. 인스턴스 생성후 사용한다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class SelfTest:
    def function1():                    # 클래스의 메스드 (여러 인스턴스들이 함께쓰는 공유 클래스 메소드)
        print('function1 called!')
    def function2(self):                # 인스턴스의 메소드, self 인자 있다.
        print(id(self))                 # 인스턴스의 주소값 확인
        print('function2 called!')
 
self_test = SelfTest()
#self_test.function1()  Error
SelfTest.function1()
self_test.function2()
 
print(id(self_test))
SelfTest.function2(self_test)  
cs

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class WareHouse:
    # 클래스 변수
    stock_num = 0                   # self 가 없으므로 모든 인스턴스에서 공유
    def __init__(self,name):
        self.name = name
        WareHouse.stock_num += 1    # 인스턴스 생성시 +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()
print(WareHouse.__dict__)   # 클래스 네임스페이스 , 클래스 변수는 공유한다.
 
print(user1.name)
print(user2.name)
print(user3.name)
 
# 자기 네임스페이스에 없으면 클래스의 네임스페이스에 찾는다. 그래로 없으면 Error
print(user1.stock_num)      
 
del user1       # 인스턴스 메모리에서 삭제
 
print(user2.stock_num)
print(user3.stock_num)
cs

 

 

 

 

'python > 파이썬 교육' 카테고리의 다른 글

[Python] matplotlib 실습하기 1  (0) 2021.05.05
[Python] 클래스3 - 상속  (0) 2021.05.05
[Python] Pandas 2 예제  (0) 2021.05.05
[python] 클래스1  (0) 2020.06.18
[python] 파일 입출력  (0) 2020.06.18
Comments