사실 자바에서는 아래처럼 모든 메서드의 인자에 this가 들어있다.
파이썬은 그것을 self라는 키워드를 통해 명시적으로 표현하는 것이다.
또한 객체 필드를 만들시 바깥에 만들지 않고 생성자 안쪽에 만든다.
class Calculator:
def __init__(self): # 생성자, 정해진 이름!
self.result = 0 # 필드(멤버 변수)
def add(self, num): # 메서드(멤버 함수)
self.result += num
return self
def getresult(self):
return self.result
cal0 = Calculator()
cal1 = Calculator()
print(cal0.add(100).add(200).add(300).getresult()) # 600출력
print(cal1.add(1).add(2).add(3).getresult()) # 6
class Human:
# 메서드
def __init__(self):
# 필드(멤버 변수)
self.name = ""
self.age = 0
def setHuman(self, name, age):
self.name = name;
self.age = age;
def getHuman(self):
return self.name, self.age
human0 = Human()
human1 = Human()
human0.setHuman("홍길동", 24)
human1.setHuman("임꺽정", 33)
print(human0.getHuman())
print(human1.getHuman())
# ('홍길동', 24) 출력
# ('임꺽정', 33)
human0.address = "지리산"
human1.score = 99
print(human0.name, human0.age, human0.address)
print(human1.name, human1.age, human1.score)
위처럼 추가시 아래 출력
생성자를 이용하여 다른방식으로 초기화 가능
class Human:
def __init__(self, name, age):
self.name = name
self.age = age
def getHuman(self):
return self.name, self.age
human0 = Human("홍길동", 24)
human1 = Human("임꺽정", 33)
print(human0.getHuman())
print(human1.getHuman())
# ('홍길동', 24) 출력
# ('임꺽정', 33)
클래스 변수를 만들면 객체들이 공유하게 된다.
class Academy:
name = "비트캠프-" # 모든 객체가 공유할 수 있는 변수
stnum = 0
def __init__(self, name, num):
self.name = name
self.stnum = num
Academy.stnum += num
aca0 = Academy("신촌", 300)
aca1 = Academy("종로", 250)
print("*" * 20)
print(Academy.name + ":" + str(Academy.stnum))
print(Academy.name + aca0.name + ":" + str(aca0.stnum))
print(Academy.name + aca1.name + ":" + str(aca1.stnum))
print("*" * 20)
# 출력결과
********************
비트캠프-:550
비트캠프-신촌:300
비트캠프-종로:250
********************