'''
클래스 : 사용자 정의 자료형.
구조체 + 함수
멤버 변수 + 멤버 함수 이루어짐
추상화 과정 : 클래스 생성의 과정.
예 :계좌
일반인 : 계좌번호, 은행명, 잔액, 거래내력, 대출가능, ...
은행원 : 계좌번호, 지점명, 고객명, ...
객체지향언어 => 파이썬은 불완전 객체 지향
상속 : 기존 클래스를 이용하여 새로운 클래스 생성
캡슐화 : 접근제어자. 파이썬에서는 없다.
다형성 : 상속에 의해서 객체를 다른 형태로 봄
오버로딩(메서드의 다형성)
'''
# 클래스
# 기본 생성자
# __int__(self) : => 생성자를 구현하지 않으면 자동으로 제공되는 생성자
# pass
# self 자기 참조 변수, 객체 내부에서 사용됨
class Car :
color = "" # 멤버 변수
speed = 0 # 멤버 변수
def upSpeed(self,value): #멤버 함수 or 멤버 메서드
self.speed += value
def downSpeed(self,value): #멤버 함수 or 멤버 메서드
self.speed -=value
mycar1 = Car() #mycar1 객체는 Car 클래스의 객체다.
mycar1.color="빨강"
mycar1.speed = 0
mycar2 = Car() #mycar2 객체는 Car 클래스의 객체다.
mycar2.color="노랑"
mycar2.speed = 0
mycar3 = Car() #mycar3 객체는 Car 클래스의 객체다.
mycar3.color="파랑"
mycar3.speed = 0
mycar1.upSpeed(30)
print("자동차 1의 색상은 %s 이며, 현재 속도는 %dkm입니다"
%(mycar1.color,mycar1.speed))
mycar2.upSpeed(60)
print("자동차 2의 색상은 %s 이며, 현재 속도는 %dkm입니다"
%(mycar2.color,mycar2.speed))
mycar3.upSpeed(10)
print("자동차 3의 색상은 %s 이며, 현재 속도는 %dkm입니다"
%(mycar3.color,mycar3.speed))
mycar2.color
mycar2.speed
### 생성자 : 객체화시 관여하는 메서드
### 클래스의 가장 중요한 기능은 객체 생성
### 생성자 없는 객체 생성은 불가함
### __int__ 형태로 생성자를 구현함
### 기본생성자 : 클래스 정의시 생성자를 구현하지 않으면 기본으로 제공됨
### : def __init__(self) :
### pass
class Car :
color = ""
speed = 0
def __init__(self,v1,v2) : # 생성자. 객체 생성시 2개의 변수 값을 입력하도록
self.color = v1
self.speed = v2
def upSpeed(self,value) :
self.speed += value
def downSpeed(self,value) :
self.spped -= value
mycar1 = Car("빨강",0) #Car() : 생성자 호출
# mycar1.color="빨강"
# mycar1.speed=0
mycar1.upSpeed(30)
print("자동차 1의 색상은 %s 이며, 현재 속도는 %dkm입니다"
%(mycar1.color,mycar1.speed))
mycar2 = Car('노랑',60) #Car 생성자 호출
print("자동차 2의 색상은 %s 이며, 현재 속도는 %dkm입니다"
%(mycar2.color,mycar2.speed))
# 쿨래스 멤버와 인스턴스 멤버
# Car. / self. 인지에 따라서 클래스 멤버인지 인스턴스 멤버인지 달라진다.
class Car :
color = "" #인스턴스 멤버
speed = 0 #인스턴스 멤버
num = 0 #인스턴스 멤버
count = 0 #클래스 멤버
def __init__(self,v="") : # 생성자 v="" 매개변수 없는 경우
self.color = v #인스턴스 멤버
self.spped = 0 #인스터스 멤버
Car.count += 1 #클래스 멤버
self.num = Car.count #인스턴스 멤버
def printMessage(self) :
print("색상: %s, 속도: %dkm, 번호:%d, 생산번호 :%s" %
(self.color,self.speed,self.num,Car.count))
mycar1,mycar2 = None,None
mycar1 = Car()
mycar1.speed = 30
mycar1.printMessage()
mycar2 = Car()
mycar2.speed = 50
mycar2.printMessage()
#Car 클래스의 count 변수를 변경
Car.count += 10
mycar1.count += 10
print(mycar1.count)
print(mycar2.count)
print(Car.count)
print(mycar2.count)
mycar1.printMessage()
mycar2.printMessage()
# mycar3 객체 생성하기. 색상은 빨강색으로 speed는 0으로
mycar3 = Car("빨강")
mycar3.speed = 0
mycar3.printMessage()
# 문제
# Card 클래스 구현하기
# 멤버 변수 : kind, number, no, count
# 멤버 함수 : printMessage()
#1번째 풀이
class Card:
kind = ""
number = 1
no = 0
count = 0
def __init__(self,v1="",v2=""):
self.kind = "Spade" if v1 =="" else v1
self.number = "1" if v2=="" else v2
Card.count += 1
self.no = Card.count
def printMessage(self) :
print("kind:%s, number:%s, no:%d, count:%s" %
(self.kind,self.number,self.no,Card.count))
card1 = Card()
card2 = Card("Heart")
card3 = Card("Spade",10)
card1.printMessage() #kind:Spade, number:1, no:1, count:3
card2.printMessage() #kind:Heart, number:1, no:2, count:3
card3.printMessage() #kind:Spade, number:10, no:3, count:3
# 2번째 풀이
class Card:
kind = ""
number = 1
no = 0
count = 0
def __init__(self,v1="Spade",v2=1):
self.kind = v1
self.number = v2
Card.count += 1
self.no = Card.count
def printMessage(self) :
print("kind:%s, number:%d, no:%d, count:%s" %
(self.kind,self.number,self.no,Card.count))
card1 = Card()
card2 = Card("Heart")
card3 = Card("Spade",10)
card1.printMessage() #kind:Spade, number:1, no:1, count:3
card2.printMessage() #kind:Heart, number:1, no:2, count:3
card3.printMessage() #kind:Spade, number:10, no:3, count:3
'Python' 카테고리의 다른 글
Python - 클래스, 상속 연습문제 (0) | 2021.06.17 |
---|---|
Python - 모듈 (0) | 2021.06.16 |
Python - 예외처리 연습문제 (0) | 2021.06.16 |
Python - 예외 처리 (except) (0) | 2021.06.15 |
Python - 함수/입력 연습 문제(피보나치 수열, 홀수 짝수 문제) (0) | 2021.06.15 |