color = 'red'
.
+ 속성명 def driving(self):
pass
.
+ 메소드명 + ()
self
인자를 전달하지 않음self
의 값은 인터프리터가 제공self.
을 붙여줌🔔 '__' 언더바가 두 개씩 있는 메소드 ⇨ 매직 메소드
__init__
역시 def
키워드로 정의class Car2:
def __init__(self, color='red', category='sprots car'): # 키워드 인자 지정
self.color = color
self.category = category
__init__
메소드 내에 self.
과 함께 설정클래스 변수
Manufacture
: 클래스 변수car1
& car2
: Manufacture 속성을 공유인스턴스 변수
color
& category
: 인스턴스 변수,car1
& car2
: color
& category
속성을 공유❌∴ 객체 단위로 변경되는 변수는 인스턴스 변수로 선언😀
- NewCar에는 아무런 기능도 코딩하지 않았는데 Car의 기능을 그대로 사용 ⇨ 속성
- Car 클래스와 비슷한 기능과 속성을 유지 & maker 속성만 추가한 클래스 생성 ⇨ Car 클래스를 상속받은 뒤 maker 속성만 추가
class NewCar(Car):
def fly(self): # 새로운 메소드 추가(add)
print("I'm flying!! This is the new car!!")
def drive(self): # 메소드 오버라이드(override 재정의)
print("I'm driving and can fly")
이유 | 설명 |
---|---|
추상화 (abstraction) | 복잡한 자료, 모듈, 시스템 등으로 부터 핵심적인 개념 또는 기능을 간추려 내는 것 |
캡슐화 (encapsulation) | 객체의 속성과 메소드를 하나로 묶어 실제 구현 내용 일부를 외부에 감추어 은닉함 |
n
을 입력def main():
n = get_inputs()
mydice = FunnyDice(n)
mydice.throw()
print("행운의 숫자는? {}".format(mydice.getval()))
class FunnyDice:
def __init__(self, n=6): # 생성자__init__ 구현
self.n = int(n)
self.numbers = list(range(1, n+1)) # 주사위 눈 범위
self.index = randrange(0, self.n) # number의 index=> random 추출되도록함
self.val = self.numbers[self.index] # 추출된 랜덤 주사위 눈
def throw(self): # 주사위 눈이 나오는 메소드
self.index = randrange(0, self.n)
self.val = self.numbers[self.index]
def getval(self): # 추출된 주사위 눈 변수 반환(접근하는 메소드)
return self.val
def setval(self, val):
if val <= self.n:
self.val = val
else:
msg = "주사위에 없는 숫자입니다. 주사위는 1 ~ {0}까지 있습니다. ".format(self.n)
raise ValueError(msg)
FunnyDice 클래스 Test
get_input함수
def get_inputs():
n = int(input("주사위 면의 개수를 입력하세요: "))
return n
오늘은 오랜만에 당일 정리 완료😁
하지만 상속의 super()부분 이해가 더 필요해서 공부를 해야겠다
그리고 오늘 ratsgo님의 "개발자를 위한 글쓰기" 세미나에서
이 이야기가 인상이 깊었다! 다시 되새겨서 "글쓰기가 어렵다" 할 때 한 번씩 위 3개를 봐자❕❗❕❗