프로그래밍 문법/python

클래스 static 변수

씩씩한 IT블로그 2020. 7. 29. 01:09
반응형

파이썬에선 클래스 내의 변수는 일단 static 변수로 생각하면된다. 따라서 각 객체에서 접근하면 메모리 위치가 같다.

class myClass:
    staticValue=0
    
    def __init__(self,x,y):
        self.x=x
        self.y=y

        

e=myClass(10,20)
f=myClass(20,30)
print(id(e.staticValue))
print(id(f.staticValue))
4548777056
4548777056

 

또한 변수를 수정했을때도 반영된다. ( class.staticvalue 형태로 접근한다 )

myClass.staticValue=100
print(e.staticValue)
print(f.staticValue)

 

100
100

 

여기서 객체를 통해 staticValue를 수정하면, 그즉시 id가 달라지면서 static변수가 해당객체의 지역변수가 된다.

e.staticValue=5
print(e.staticValue)
print(f.staticValue)

print(id(e.staticValue))
print(id(f.staticValue))
5
0
4548777216
4548777056

 

클래스 코드 내에서도 static변수에 접근할 수 있다. (역시 class.staticvalue 형태로 접근한다)

class myclass:
    staticValue=0
    
    def __init__(self,x,y):
        self.x=x
        self.y=y
        myclass.staticValue+=1
        
        
a=myclass(10,20)

print(myclass.staticValue,a.staticValue)

print(id(myclass.staticValue))
print(id(a.staticValue))
1 1
4548777088
4548777088

 

반대로 self.value로 접근하면 그 즉시 객체의 지역변수로 바뀐다.

class noStatic:
    noStaticValue=0
    
    def __init__(self,x,y):
        self.x=x
        self.y=y
        self.noStaticValue+=1
        
d=noStatic(10,20)

print(noStatic.noStaticValue,d.noStaticValue)
print(id(noStatic.noStaticValue))
print(id(d.noStaticValue))
0 1
4548777056
4548777088

 

 

반응형