핀아의 저장소 ( •̀ ω •́ )✧
15일차(2020-11-26) 본문
251 클래스, 객체, 인스턴스
클래스, 객체, 인스턴스에 대해 설명해봅시다.
-> 클래스는 제품의 설계도라 생각하면 되고 클래스 타입으로 선언 되었을 때를 객체라 한다. 그리고 객체가 메모리에 올라가 사용될 때 인스턴스라고 한다.
252 클래스 정의
비어있는 사람 (Human) 클래스를 "정의" 해보세요.
->
class Human():
pass
253 인스턴스 생성
사람 (Human) 클래스의 인스턴스를 "생성" 하고 이를 areum 변수로 바인딩해보세요.
->
class Human:
pass
areum = Human()
254 클래스 생성자-1
사람 (Human) 클래스에 "응애응애"를 출력하는 생성자를 추가하세요.
>>> areum = Human() 응애응애
->
class Human:
def __init__(self):
print("응애응애")
areum = Human()
255 클래스 생성자-2
사람 (Human) 클래스에 (이름, 나이, 성별)을 받는 생성자를 추가하세요.
>>> areum = Human("아름", 25, "여자")
->
class Human:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
areum = Human("아름", 25, "여자")
print(areum.name)
256 인스턴스 속성에 접근
255에서 생성한 인스턴스의 이름, 나이, 성별을 출력하세요. 인스턴스 변수에 접근하여 값을 출력하면 됩니다.
이름: 조아름, 나이: 25, 성별: 여자
인스턴스 변수에 접근하여 값을 가져오는 예
>>> areum.age 25
->
class Human:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
areum = Human("아름", 25, "여자")
print("나이:",areum.age)
257 클래스 메소드 - 1
사람 (Human) 클래스에서 이름, 나이, 성별을 출력하는 who() 메소드를 추가하세요.
>>> areum.who() 이름: 조아름, 나이: 25, 성별: 여자
->
class Human:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def who(self):
print("이름: {0}, 나이: {1}, 성별: {2}".format(self.name, self.age, self.gender))
areum = Human("아름", 25, "여자")
areum.who()
258 클래스 메소드 - 2
사람 (Human) 클래스에 (이름, 나이, 성별)을 받는 setInfo 메소드를 추가하세요.
>>> areum = Human("모름", 0, "모름") >>> areum.setInfo("아름", 25, "여자")
->
class Human:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def who(self):
print("이름: {0}, 나이: {1}, 성별: {2}".format(self.name, self.age, self.gender))
def setInfo(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
areum = Human("모름", 0, "성별")
areum.who()
areum.setInfo("아름", 25, "여자")
areum.who()
259 클래스 소멸자
사람 (human) 클래스에 "나의 죽음을 알리지 말라"를 출력하는 소멸자를 추가하세요.
>>> areum = Human("아름", 25, "여자") >>> del areum 나의 죽음을 알리지 말라
->
class Human:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def __del__(self):
print("나의 죽음을 알리지 말라")
def who(self):
print("이름: {0}, 나이: {1}, 성별: {2}".format(self.name, self.age, self.gender))
def setInfo(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
areum = Human("아름", 25, "여자")
del areum
260 에러의 원인
아래와 같은 에러가 발생한 원인에 대해 설명하세요.
class OMG : def print() : print("Oh my god") >>> >>> myStock = OMG() >>> myStock.print() TypeError Traceback (most recent call last) <ipython-input-233-c85c04535b22> in <module>() ----> myStock.print() TypeError: print() takes 0 positional arguments but 1 was given
->
261 Stock 클래스 생성
주식 종목에 대한 정보를 저장하는 Stock 클래스를 정의해보세요. 클래스는 속성과 메서드를 갖고 있지 않습니다.
->
class Stock():
pass
262 생성자
Stock 클래스의 객체가 생성될 때 종목명과 종목코드를 입력 받을 수 있도록 생성자를 정의해보세요.
삼성 = Stock("삼성전자", "005930")
->
class Stock:
def __init__(self, name, code):
self.name = name
self.code = code
삼성 = Stock("삼성전자", "005930")
print(삼성.name)
print(삼성.code)
263 메서드
객체에 종목명을 입력할 수 있는 set_name 메서드를 추가해보세요.
a = Stock(None, None) a.set_name("삼성전자")
->
class Stock:
def __init__(self, name, code):
self.name = name
self.code = code
def set_name(self, name):
self.name = name
a = Stock(None, None)
a.set_name("삼성전자")
print(a.name)
264 메서드
객체에 종목코드를 입력할 수 있는 set_code 메서드를 추가해보세요.
a = Stock(None, None) a.set_code("005930")
->
class Stock:
def __init__(self, name, code):
self.name = name
self.code = code
def set_name(self, name):
self.name = name
def set_code(self, code):
self.code = code
a = Stock(None, None)
a.set_code("005930")
print(a.code)
265 메서드
종목명과 종목코드를 리턴하는 get_name, get_code 메서드를 추가하세요. 해당 메서드를 사용하여 종목명과 종목코드를 얻고 이를 출력해보세요.
삼성 = Stock("삼성전자", "005930")
->
class Stock:
def __init__(self, name, code):
self.name = name
self.code = code
def set_name(self, name):
self.name = name
def set_code(self, code):
self.code = code
def get_name(self):
return self.name
def get_code(self):
return self.code
a = Stock("삼성전자", "005930")
print(a.name)
print(a.code)
print(a.get_name())
print(a.get_code())
★ a.name과 a.get_name() 둘 다 값이 나오는건 return을 해줬기 때문이다.
266 객체의 속성값 업데이트
생성자에서 종목명, 종목코드, PER, PBR, 배당수익률을 입력 받을 수 있도록 생성자를 수정하세요. PER, PBR, 배당수익률은 float 타입입니다.
->
class Stock:
def __init__(self, name, code, per, pbr, rate):
self.name = name
self.code = code
self.per = per
self.pbr = pbr
self.rate = rate
def set_name(self, name):
self.name = name
def set_code(self, code):
self.code = code
def get_name(self):
return self.name
def get_code(self):
return self.code
267 객체 생성
266번에서 정의한 생성자를 통해 다음 정보를 갖는 객체를 생성해보세요.
항목정보
종목명 | 삼성전자 |
종목코드 | 005930 |
PER | 15.79 |
PBR | 1.33 |
배당수익률 | 2.83 |
->a = Stock("삼성전자", "005930", 15.79, 1.33, 2.83)
268 객체의 속성 수정
PER, PBR, 배당수익률은 변경될 수 있는 값입니다. 이 값을 변경할 때 사용하는 set_per, set_pbr, set_dividend 메서드를 추가하세요.
->
class Stock:
def __init__(self, name, code, per, pbr, rate):
self.name = name
self.code = code
self.per = per
self.pbr = pbr
self.rate = rate
def set_name(self, name):
self.name = name
def set_code(self, code):
self.code = code
def get_name(self):
return self.name
def get_code(self):
return self.code
def set_per(self, per):
self.per = per
def set_pdr(self, pdr):
self.pdr = pdr
def set_dividend(self, dividend):
self.dividend = dividend
269 객체의 속성 수정
267번에서 생성한 객체에 set_per 메서드를 호출하여 per 값을 12.75로 수정해보세요.
->
a = Stock("삼성전자", "005930", 15.79, 1.33, 2.83)
a.set_per(12.75)
print(a.per)
270 여러 종목의 객체 생성
아래의 표를 참조하여 3종목에 대해 객체를 생성하고 이를 파이썬 리스트에 저장하세요. 파이썬 리스트에 저장된 각 종목에 대해 for 루프를 통해 종목코드와 PER을 출력해보세요.
종목명종목코드PERPBR배당수익률
삼성전자 | 005930 | 15.79 | 1.33 | 2.83 |
현대차 | 005380 | 8.70 | 0.35 | 4.27 |
LG전자 | 066570 | 317.34 | 0.69 | 1.37 |
->
ff = []
a = Stock("삼성전자", "005930", 15.79, 1.33, 2.83)
b = Stock("현대차", "005380", 8.70, 0.35, 4.27)
c = Stock("LG전자", "066570", 317.34, 0.69, 1.37)
ff.append(a)
ff.append(b)
ff.append(c)
for i in ff:
print(i.code, i.per)
271 Account 클래스
은행에 가서 계좌를 개설하면 은행이름, 예금주, 계좌번호, 잔액이 설정됩니다. Account 클래스를 생성한 후 생성자를 구현해보세요. 생성자에서는 예금주와 초기 잔액만 입력 받습니다. 은행이름은 SC은행으로 계좌번호는 3자리-2자리-6자리 형태로 랜덤하게 생성됩니다.
은행이름: SC은행 계좌번호: 111-11-111111
->
import random
class Account:
def __init__(self, name, don):
self.name = name
self.don = don
self.bank = "SC은행"
num1 = random.randint(0,999)
num2 = random.randint(0,99)
num3 = random.randint(0,999999)
num1 = str(num1).zfill(3)
num2 = str(num2).zfill(2)
num3 = str(num3).zfill(6)
self.account_num = num1 + "-" + num2 + "-" + num3
hong = Account("홍길동", 2000)
print(hong.name)
print(hong.don)
print(hong.bank)
print(hong.account_num)
272 클래스 변수
클래스 변수를 사용해서 Account 클래스로부터 생성된 계좌 객체의 개수를 저장하세요.
->
import random
class Account:
cnt = 0
def __init__(self, name, don):
self.name = name
self.don = don
self.bank = "SC은행"
num1 = random.randint(0,999)
num2 = random.randint(0,99)
num3 = random.randint(0,999999)
num1 = str(num1).zfill(3)
num2 = str(num2).zfill(2)
num3 = str(num3).zfill(6)
self.account_num = num1 + "-" + num2 + "-" + num3
Account.cnt += 1
273 클래스 변수 출력
Account 클래스로부터 생성된 계좌의 개수를 출력하는 get_account_num() 메서드를 추가하세요.
->
import random
class Account:
cnt = 0
def __init__(self, name, don):
self.name = name
self.don = don
self.bank = "SC은행"
num1 = random.randint(0,999)
num2 = random.randint(0,99)
num3 = random.randint(0,999999)
num1 = str(num1).zfill(3)
num2 = str(num2).zfill(2)
num3 = str(num3).zfill(6)
self.account_num = num1 + "-" + num2 + "-" + num3
Account.cnt += 1
def get_account_num(self):
print(self.cnt)
hong = Account("홍길동", 2000)
kim = Account("김하나", 5000)
kim.get_account_num()
274 입금 메서드
Account 클래스에 입금을 위한 deposit 메서드를 추가하세요. 입금은 최소 1원 이상만 가능합니다.
->
import random
class Account:
cnt = 0
def __init__(self, name, don):
self.name = name
self.don = don
self.bank = "SC은행"
num1 = random.randint(0,999)
num2 = random.randint(0,99)
num3 = random.randint(0,999999)
num1 = str(num1).zfill(3)
num2 = str(num2).zfill(2)
num3 = str(num3).zfill(6)
self.account_num = num1 + "-" + num2 + "-" + num3
Account.cnt += 1
def get_account_num(self):
print(self.cnt)
def deposit(self, inmoney):
if inmoney>=1:
self.don += inmoney
hong = Account("홍길동", 2000)
kim = Account("김하나", 5000)
kim.get_account_num()
kim.deposit(3333)
print(kim.don)
275 출금 메서드
Account 클래스에 출금을 위한 withdraw 메서드를 추가하세요. 출금은 계좌의 잔고 이상으로 출금할 수는 없습니다.
->
import random
class Account:
cnt = 0
def __init__(self, name, don):
self.name = name
self.don = don
self.bank = "SC은행"
num1 = random.randint(0,999)
num2 = random.randint(0,99)
num3 = random.randint(0,999999)
num1 = str(num1).zfill(3)
num2 = str(num2).zfill(2)
num3 = str(num3).zfill(6)
self.account_num = num1 + "-" + num2 + "-" + num3
Account.cnt += 1
def get_account_num(self):
print(self.cnt)
def deposit(self, inmoney):
if inmoney>=1:
self.don += inmoney
def withdraw(self, outmoney):
if self.don>outmoney:
self.don -= outmoney
kim = Account("김하나", 5000)
kim.deposit(3333)
kim.withdraw(1000)
print(kim.don)
'Computer Science > 코딩테스트_Python' 카테고리의 다른 글
17일차(2020-11-30) (0) | 2020.11.30 |
---|---|
16일차(2020-11-27) (0) | 2020.11.27 |
14일차(2020-11-25) (0) | 2020.11.25 |
13일차(2020-11-24) (0) | 2020.11.24 |
12일차(2020-11-23) (0) | 2020.11.21 |