티스토리 뷰

Python

[Python] static 멤버 변수

developer0hye 2023. 2. 6. 23:07

클래스의 함수 바깥에서 변수를 정의하면 이 변수는 static 멤버변수가 된다.

 

이 변수를 static 멤버변수로서 값을 수정하고 싶다면 클래스이름.변수  로 접근하여 수정해야한다.

 

그렇지않고 self.변수 나 객체.변수 이런식으로 값을 수정하게 되면 static의 특성을 잃고 멤버 변수로써 재정의가 된다.

 

아래의 예제코드에서 foo.x 가 static 멤버변수이다.

 

class foo(object):
    x = 'original'
    def __init__(self):
        self.y = 'hi'

    def setx(self, x):
        foo.x = x

c1 = foo()
print(c1.x) # original
print(c1.y) # hi

c2 = foo()
print(c2.x) # original
print(c2.y) # hi

c1.y = 'bye'
print(c1.y) # bye
print(c2.y) # hi

foo.x = 'new'
print(c1.x) # new
print(c2.x) # new

c1.setx('new2')
print(c1.x) # new2
print(c2.x) # new2

c1.x = 'new class'
print(c1.x) # new class
print(c2.x) # new2

c2.x = 'new class 2'
print(c1.x) # new class
print(c2.x) # new class 2

관련 스택오버플로 질문

https://stackoverflow.com/questions/1537202/difference-between-variables-inside-and-outside-of-init-class-and-instanc

 

difference between variables inside and outside of __init__() (class and instance attributes)

Is there any difference at all between these classes besides the name? class WithClass (): def __init__(self): self.value = "Bob" def my_func(self): print(self.value) class

stackoverflow.com

 

실제 사용 예

https://github.com/abewley/sort/blob/master/sort.py#L94-L98

 

GitHub - abewley/sort: Simple, online, and realtime tracking of multiple objects in a video sequence.

Simple, online, and realtime tracking of multiple objects in a video sequence. - GitHub - abewley/sort: Simple, online, and realtime tracking of multiple objects in a video sequence.

github.com

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함