클래스 : 클래스는 객체를 생성해주는 공장 같은 것이다. 클래스 내부에서 객체의 속성과 메소드(행동?)을 설정할 수 있다.
class food:
def __init__(self, grade) : # 인스턴스는 init의 매개변수 self에 들어간다고 보면 됨.
self.open = '런칭 기념! 할인 30% 해드립니다'
self.name = self
self.taste = 5 * grade
self.price = 10000 + grade * 100
def detail(self) :
print(self.taste)
print(self.price)
print(self.open)
def mat(self) :
print(self.material)
init함수로 객체의 속성을 설정하고, init제외 일반 함수들로 객체의 메소드를 만든다.
taco = food(5) [1]
taco.detail() [2]
> 25
> 10500
> 런칭 기념! 할인 30% 해드립니다
taco.material = 'cheese, pork' [3]
taco.mat() [4]
> cheese, pork
print('오픈행사 : ', taco.open) [5]
> 오픈행사 : 런칭 기념! 할인 30% 해드립니다
print('평점 : ', taco.taste)
> 평점 : 25
print('가격 : ', taco.price)
> 가격 : 10500
print('재료 : ', taco.material)
> 재료 : cheese, pork
클래스는 클래스 자체로 사용할 수 없다. 인스턴스(객체)를 만들고 그 인스턴스를 통해 실행된다.
[1] : food라는 클래스를 통해 taco라는 인스턴스를 만들었다. 인자 5는 클래스의 매개변수 grade다.
[2] : taco인스턴스의 detail메소드를 호출했다.
[3] : 클래스 밖에서도 인스턴스 속성을 추가할 수 있다. 이렇게 생성한 속성은 클래스의 다른 인스턴스에는 없는, taco 인스턴스의 유일한 속성이다.
[4] : 클래스 밖에서 생성한 속성은 클래스 내부에서도 사용할 수 있다. 하지만 다른 인스턴스의 경우 오류가 발생한다.
salad = food(3)
salad.material
> AttributeError: 'food' object has no attribute 'material'
[5] : 클래스 밖에서 인스턴스의 속성값을 사용하고 싶다면 self.속성명이 아닌 인스턴스.속성명을 사용해야 한다. self는 클래스 내부에서 인스턴스를 지칭하는 용어로 인스턴스를 선언할 때 init의 self매개변수에 인스턴스가 인자로 들어간다고 생각하면 된다.
자바스크립트할 때 클래스를 공부해서 쉽게 이해할수 있었다.