📌 Python 클래스
- 클래스__
정의 : 새로운 타입을 생성, 객체 지향적(중심적)인 프로그래밍_
형식 : class 클래스명(): 멤버(필드, 메소드) ~
- 특징
- 생성자, 소멸자가 있다.
- 접근지정자, 메소드 오버라이딩이 없다.
- 다중상속 가능, interface가 없다.
- 생성자 없이 객체를 만들 수 있다.
- this 대신 self를 사용한다.
class TestClass:
aa = 1
def __init__(self, *param):
self.aa = param
print("생성자")
def __del__(self):
print("소멸자")
def printMessage(self):
name = "한국인"
print(name)
print(self.aa)
print(TestClass, id(TestClass))
print(TestClass.aa)
test = TestClass(1, 2)
TestClass.printMessage(test)
test.printMessage()
📌 Python 원형 객체 VS 인스턴스 객체
- prototype VS instance
- prototype 객체 : 모든 인스턴스에 공유가능한 설계도
- 인스턴스화 객체 : 생성자에 선언된 필드만 가지고 있는 설계도
- prototype과 인스턴스의 특징
- 인스턴스화 객체는 자신에게 없는 필요한 맴버를 prototype 객체에서 공유가능한 맴버에 접근할 수 있다.
- prototype과 인스턴스가 참조하는 주소는 다르다.
class Car:
handle = 0
speed = 0
def __init__(self, name, speed):
self.name = name
self.speed = speed
def showData(self):
km = 'km/s'
msg = f'속도 : {str(self.speed)}{km}'
return msg
Car.handle = 20
Car.speed = 10
car = Car('BMW M340i', 100)
print(car.handle, car.speed, car.name)
car2 = Car('BMW M550i', 100)
print(car2.handle, car2.speed, car2.name)
car2.handle = 10
📌 Python 클래스의 이해
kor = 100
def a1():
print('모듈 맴버 : 함수')
class myClass:
kor = 90
def __init__(self, kor):
self.kor = kor
def test2(self):
kor = 10
print(self.kor)
print(kor)
my = myClass()
- 전역변수와 지역변수의 관계
- 메소드 내부에서 지역 변수를 출력할 때, 지역 변수를 찾다가 없으면
- 클래스 내부의 맴버 필드를 참조하는 것이 아니라 전역변수를 참조한다.
📌 Python 클래스 포함 관계
- 포함 관계
- 특정 클래스 내부에서 다른 클래스의 생성자를 호출하는 것이다.
class Machine:
cupCount = 1
def __init__(self, coin, cupCount):
self.coinIn = CoinIn()
self.coinIn.coin = coin
self.cupCount = cupCount
def showData(self):
msg = self.coinIn.culc(self.cupCount)
print(msg)
class CoinIn:
coin = 0
change = 0
def culc(self, cupCount):
change = self.coin - cupCount*200
if change >= 0:
self.change = change
return f'커피 {cupCount}잔과 잔돈 {self.change}원'
return "요금 부족!!"
if __name__ == '__main__':
coin = int(input('동전을 입력하세요 : '))
cup = int(input('몇 잔을 원하세요 : '))
useMuchine = Machine(coin, cup)
useMuchine.showData()