티스토리 뷰

9.3. 클래스와의 첫 만남

9.3.4. 메서드 객체

  • 보통 메서드는 연결되자마자 호출된다.
  • 하지만 메서드를 즉시 호출할 필요 없이 메소드 객체(x.f)를 다른 변수(xf)에 저장한 후 호출될 수 있다.
class MyClass:
    def __init__(self):
        pass
    def f(self):
        print("Hello World")


x = MyClass()
xf = x.f()
while True:
    print(xf())
  • 위의 코드는 무한히 Hello World를 출력하게 된다.

9.3.5. 클래스와 인스턴스 변수

  • 일반적으로 말해서, 인스턴스 변수는 인스턴스별 데이터를 위한 것이고 클래스 변수는 그 클래스의 모든 인스턴스에서 공유되는 어트리뷰트와 메서드를 위한 것이다.

    class Dog:
    
        kind = 'canine'         # class variable shared by all instances
    
        def __init__(self, name):
            self.name = name    # instance variable unique to each instance
    
    d = Dog('Fido')
    e = Dog('Buddy')
    d.kind                  # 모든 Dog 클래스 객체에서 공유(같음)
    # 'canine'
    e.kind                  # 모든 Dog 클래스 객체에서 공유(같음)
    # 'canine'
    # d.name                  # 변수 d에 대해서만 특정됨(각 인스턴스마다 다름)
    'Fido'
    # e.name                  # 변수 e에 대해서만 특정됨(각 인스턴스마다 다름)
    'Buddy'
  • 딕셔너리나 리스트와 같이 가변 객체가 클래스 변수로 있게 된다면 예상치 못하게 변수를 공유하게 될 수도 있다.

    class Dog:
    
        tricks = []             # 실수로 클래스 변수로 선언 되었다.
    
        def __init__(self, name):
            self.name = name
    
        def add_trick(self, trick):
            self.tricks.append(trick)
    
    d = Dog('Fido')
    e = Dog('Buddy')
    d.add_trick('roll over')
    e.add_trick('play dead')
    d.tricks                # 예상치 못하게 trick 변수를 공유하게 됐다.
    # ['roll over', 'play dead']
  • 올바른 설계는 클래스 변수 말고 인스턴스 변수를 사용해야 된다.

    class Dog:
    
      def __init__(self, name):
          self.name = name
          self.tricks = []    # 각 Dog 객체들에게 새로운 빈 리스트를 만들어 준다.
    
      def add_trick(self, trick):
          self.tricks.append(trick)
    
    d = Dog('Fido')  
    e = Dog('Buddy')  
    d.add\_trick('roll over')  
    e.add\_trick('play dead')  
    d.tricks
    # ['roll over']
    
    e.tricks
    
    # ['play dead']

 

Reference: 파이썬 자습서

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