[Python응용] 1. 인스턴스 사용과 self의 의미

인스턴스 객체를 다양하게 사용하는 방법

인스턴스 객체 멤버 변수 이름 해석 순서

  1. 인스턴스 객체 내부
  2. 클래스 객체 내부
  3. 전역공간

두개의 인스턴스 객체를 생성하여 이름을 해석하는 방법

class Person:
  name = "Default Name"

p1 = Person()
p2 = Person()
p1.name = "전우치"
print("p1's name", p1.name)
p1's name 전우치
print("p2's name", p2.name)
p2's name Default Name

클래스에 새로운 멤버 변수 title 추가하는 방법

Person.title = "New title"
print("p1's title:", p1.title)
p1's title: New title
print("p2's title:", p2.title)
p2's title: New title
print("Person's title:", Person.title)
Person's title: New title

인스턴스 객체에 동적으로 멤버 변수를 추가하는 법

p1.age = 20 # p1객체에 추가한 age는 p1에서만 접근이 가능
print("p1's age:", p1.age)
p1's age: 20
print("p2's age:", p2.age)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Person' object has no attribute 'age'

self라는 단어의 의미

잘못된 예

str = "Not Class Member"
class GString:
  str = ""
  def set(self, msg):
    self.str = msg
  def print(self):
    print(str)

g = GString()
g.set("First Message")
g.print()
Not Class Member

올바른 예

str = "Not Class Memeber"
class GString:
  str = ""
  def set(self, msg):
    self.str = msg
  def print(self):
    print(self.str)

g = GString()
g.set("First Message")
g.print()
First Message