객체
Instance Method, classmethod, staticmethod
함수에는 데코레이터를 여러 개 지정할 수 있습니다. 다음과 같이 함수 위에 데코레이터를 여러 줄로 지정해줍니다. 이때 데코레이터가 실행되는 순서는 위에서 아래 순입니다.
def decorator1(func): def wrapper(): print('decorator1') func() return wrapper
def decorator2(func):
def wrapper():
print('decorator2')
func()
return wrapper
@decorator1
@decorator2
def hello():
print('hello')
hello()
decorator1
decorator2
hello
class ClassTest:
def __init__(self, name, age):
self.name = name
self.age = age
def print_info(self):
print(self.name, self.age)
def test_func(self):
self.print_info() #클래스 안에서는 self.메서드명
test = ClassTest('Kim', 10)
test.print_info() #클래스 밖에서는 객체.메서드명
test.test_func()
#출력 결과
#Kim 10
#Kim 10
class Person:
count = 0
def __init__(self):
Person.count += 1
@classmethod
def print_count(cls):
print(f'{cls.count}명 생성되었습니다') #클래스 속성 접근 가능
@classmethod
def create(cls):
p = cls() #메서드 내부에서 cls()로 현재 클래스의 인스턴스 만들 수 있음
return p
human1 = Person()
human2 = Person()
Person.print_count()
print(Person.create())
#출력 결과
#2명 생성되었습니다
#<__main__.Person object at 0x00C68238>
class Calc:
count = 10 #클래스 변수
@staticmethod
def add(a):
print(a + Calc.count) #클래스 속성에는 접근 가능
@staticmethod
def mul(a):
print(a * Calc.count)
Calc.add(10) #클래스에서 바로 메소드 호출
Calc.mul(10) #클래스에서 바로 메소드 호출
#출력 결과
#20
#100
참고문헌)
https://techblog-history-younghunjo1.tistory.com/217
https://dojang.io/mod/page/view.php?id=2427
{
"cells": [
{
"celltype": "markdown",
"metadata": {
"id": "Itfja5BTaQ_N"
},
"source": [
"01 클래스, 객체, 인스턴스\n",
"\n",
"클래스, 객체, 인스턴스에 대해 설명해봅시다."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "PmQ0_cziaLNE"
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "hlok4p0qaUyg"
},
"source": [
"02 클래스 정의\n",
"\n",
"비어있는 사람 (Human) 클래스를 \"정의\" 해보세요."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "thZitr4maWqg"
},
"outputs": [],
"source": [
"class Human:\n",
" pass"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qntPVoOPaYfZ"
},
"source": [
"03 인스턴스 생성\n",
"\n",
"사람 (Human) 클래스의 인스턴스를 \"생성\" 하고 이를 areum 변수로 바인딩해보세요."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"id": "oI90JO02afAG"
},
"outputs": [],
"source": [
"class Human:\n",
" pass\n",
"areum = Human"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "67pPXX8VagWJ"
},
"source": [
"04 클래스 생성자-1\n",
"\n",
"사람 (Human) 클래스에 \"응애응애\"를 출력하는 생성자를 추가하세요.\n",
"\n",
"\n", ">>> areum = Human()\n", "응애응애\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"id": "hr8E_cnOagkY"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"응애응애\n"
]
},
{
"data": {
"text/plain": [
"<main.Human at 0x2710cf44ca0>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class Human:\n",
" def init(self):\n",
" print(\"응애응애\")\n",
"areum = Human()\n",
"areum"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zWISFsZ9ahKf"
},
"source": [
"05 클래스 생성자-2\n",
"\n",
"사람 (Human) 클래스에 (이름, 나이, 성별)을 받는 생성자를 추가하세요.\n",
"\n",
"\n", ">>> areum = Human(\"아름\", 25, \"여자\")\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"id": "7gLfZFbeakPw"
},
"outputs": [],
"source": [
"class Human:\n",
" def init(self, name, age, sex):\n",
" self.name = name\n",
" self.age = age\n",
" self.sex = sex\n",
" \n",
"areum = Human(\"아름\", 25, \"여자\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Q2DlYxmXc0_y"
},
"source": [
"06 인스턴스 속성에 접근\n",
"\n",
"05에서 생성한 인스턴스의 이름, 나이, 성별을 출력하세요. 인스턴스 변수에 접근하여 값을 출력하면 됩니다.\n",
"\n",
"\n", "이름: 조아름, 나이: 25, 성별: 여자\n", "
\n",
"인스턴스 변수에 접근하여 값을 가져오는 예\n",
"\n", ">>> areum.age\n", "25\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"id": "RuW7cTz3c5XZ"
},
"outputs": [
{
"data": {
"text/plain": [
"25"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class Human:\n",
" def init(self, name, age, sex):\n",
" self.name = name\n",
" self.age = age\n",
" self.sex = sex\n",
" \n",
"areum = Human(\"조아름\", 25, \"여자\")\n",
"areum.age"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3mznF32Yc6A2"
},
"source": [
"07 클래스 메소드 - 1\n",
"\n",
"사람 (Human) 클래스에서 이름, 나이, 성별을 출력하는 who() 메소드를 추가하세요.\n",
"\n",
"\n", ">>> areum.who()\n", "이름: 조아름, 나이: 25, 성별: 여자\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"id": "rq6F_9Tbc8BS"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"이름: 조아름 나이: 25 성별: 여자\n"
]
}
],
"source": [
"class Human:\n",
" def init(self, name, age, sex):\n",
" self.name = name\n",
" self.age = age\n",
" self.sex = sex\n",
" \n",
" def who(self):\n",
" print(\"이름: {} 나이: {} 성별: {}\".format(self.name, self.age, self.sex))\n",
" \n",
"areum = Human(\"조아름\", 25, \"여자\")\n",
"areum.who()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "UjDuU-CWc_bB"
},
"source": [
"08 클래스 메소드 - 2\n",
"\n",
"사람 (Human) 클래스에 (이름, 나이, 성별)을 받는 setInfo 메소드를 추가하세요.\n",
"\n",
"\n", ">>> areum = Human(\"모름\", 0, \"모름\")\n", ">>> areum.setInfo(\"아름\", 25, \"여자\")\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"id": "Hmqu32YFdAOy"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"이름: 아름 나이: 25 성별: 여자\n",
"None\n"
]
}
],
"source": [
"class Human:\n",
" def init(self, name, age, sex):\n",
" self.name = name\n",
" self.age = age\n",
" self.sex = sex\n",
" \n",
" def who(self):\n",
" print(\"이름: {} 나이: {} 성별: {}\".format(self.name, self.age, self.sex))\n",
" \n",
" def setInfo(self, name, age, sex):\n",
" self.name = name\n",
" self.age = age\n",
" self.sex = sex\n",
" \n",
" \n",
" \n",
"\n",
"areum = Human(\"모름\", 0, \"모름\")\n",
"areum.setInfo(\"아름\", 25, \"여자\")\n",
"\n",
"print(areum.who())"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yPakC442dCrB"
},
"source": [
"09 클래스 소멸자\n",
"\n",
"사람 (human) 클래스에 \"나의 죽음을 알리지 말라\"를 출력하는 소멸자를 추가하세요.\n",
"\n",
"\n", ">>> areum = Human(\"아름\", 25, \"여자\")\n", ">>> del areum\n", "나의 죽음을 알리지 말라\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"id": "LpwJxdn0dj22"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"나의 죽음을 알리지마라\n"
]
}
],
"source": [
"class Human:\n",
" def init(self, name, age, sex):\n",
" self.name = name\n",
" self.age = age\n",
" self.sex = sex\n",
" \n",
" def who(self):\n",
" print(\"이름: {} 나이: {} 성별: {}\".format(self.name, self.age, self.sex))\n",
" \n",
" def setInfo(self, name, age, sex):\n",
" self.name = name\n",
" self.age = age\n",
" self.sex = sex\n",
" \n",
" def del(self):\n",
" print(\"나의 죽음을 알리지마라\")\n",
" \n",
"areum = Human(\"모름\", 0, \"모름\")\n",
"areum.setInfo(\"아름\", 25, \"여자\")\n",
"del(areum)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4D8wvGRSdlBU"
},
"source": [
"10 에러의 원인\n",
"\n",
"아래와 같은 에러가 발생한 원인에 대해 설명하세요.\n",
"\n",
"\n", "class OMG : \n", " def print() :\n", " print(\"Oh my god\")\n", "\n", ">>> >>> myStock = OMG()\n", ">>> myStock.print()\n", "TypeError Traceback (most recent call last)\n", "<ipython-input-233-c85c04535b22> in <module>()\n", "----> myStock.print()\n", "\n", "TypeError: print() takes 0 positional arguments but 1 was given\n", "
\n",
"\n",
"※ myStock.print() = OMG.instance(myStock)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"id": "MkgsAPBhdxLA"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Oh my god\n"
]
}
],
"source": [
"class OMG : \n",
" def print() :\n",
" print(\"Oh my god\")\n",
"\n",
"myStock = OMG()\n",
"OMG.print()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qzVenhRnd3eT"
},
"source": [
"11 Stock 클래스 생성\n",
"\n",
"주식 종목에 대한 정보를 저장하는 Stock 클래스를 정의해보세요. 클래스는 속성과 메서드를 갖고 있지 않습니다."
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"id": "PCIoLMXVd4kH"
},
"outputs": [],
"source": [
"class Stock:\n",
" pass"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GulDFifPd6An"
},
"source": [
"12 생성자\n",
"\n",
"Stock 클래스의 객체가 생성될 때 종목명과 종목코드를 입력 받을 수 있도록 생성자를 정의해보세요.\n",
"\n",
"\n", "삼성 = Stock(\"삼성전자\", \"005930\")\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"id": "44Q5oz7_d-rX"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"삼성전자\n"
]
}
],
"source": [
"class Stock:\n",
" def init(self, name, code):\n",
" self.name = name\n",
" self.code = code\n",
" \n",
"삼성 = Stock(\"삼성전자\", \"005930\")\n",
"print(삼성.name)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "emrLKq-wd_wd"
},
"source": [
"13 메서드\n",
"\n",
"객체에 종목명을 입력할 수 있는 set_name 메서드를 추가해보세요.\n",
"\n",
"\n", "a = Stock(None, None)\n", "a.set_name(\"삼성전자\")\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"id": "5uCrZKeDZX"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"삼성전자\n",
"None\n"
]
}
],
"source": [
"class Stock:\n",
" def init(self, name, code):\n",
" self.name = name\n",
" self.code = code\n",
" \n",
" def set_name(self, name):\n",
" self.name = name\n",
" \n",
"a = Stock(None, None)\n",
"a.set_name(\"삼성전자\")\n",
"print(a.name)\n",
"print(a.code)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "eKbMlQV9eD4O"
},
"source": [
"14 메서드\n",
"\n",
"객체에 종목코드를 입력할 수 있는 set_code 메서드를 추가해보세요.\n",
"\n", "a = Stock(None, None)\n", "a.set_code(\"005930\")\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"id": "X2Ugp0i2eF93"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"005930\n"
]
}
],
"source": [
"class Stock:\n",
" def init__(self, name, code):\n",
" self.name = name\n",
" self.code = code\n",
" \n",
" def set_name(self, name):\n",
" self.name = name\n",
" \n",
" def set_code(self, code):\n",
" self.code = code\n",
" \n",
"a = Stock(None, None)\n",
"a.set_code(\"005930\")\n",
"print(a.code)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0LoqT2w_eJU"
},
"source": [
"15 메서드\n",
"\n",
"종목명과 종목코드를 리턴하는 get_name, get_code 메서드를 추가하세요. 해당 메서드를 사용하여 종목명과 종목코드를 얻고 이를 출력해보세요.\n",
"\n", "삼성 = Stock(\"삼성전자\", \"005930\")\n", "
"
]
},
{
"celltype": "code",
"execution_count": 50,
"metadata": {
"id": "6tMXAg26eL0G"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"삼성전자\n",
"005930\n"
]
}
],
"source": [
"class Stock:\n",
" def init(self, name, code):\n",
" self.name = name\n",
" self.code = code\n",
" \n",
" def set_name(self, name):\n",
" self.name = name\n",
" \n",
" def set_code(self, code):\n",
" self.code = code\n",
" \n",
" def get_name(self, name):\n",
" return self.name\n",
" \n",
" def get_code(self, code):\n",
" return self.code\n",
" \n",
"삼성 = Stock(\"삼성전자\", \"005930\")\n",
"\n",
"print(삼성.name)\n",
"print(삼성.code)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jV8JgGJBeNHM"
},
"source": [
"16 객체의 속성값 업데이트\n",
"\n",
"생성자에서 종목명, 종목코드, PER, PBR, 배당수익률을 입력 받을 수 있도록 생성자를 수정하세요. PER, PBR, 배당수익률은 float 타입입니다."
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"id": "24_Fggf7eSst"
},
"outputs": [],
"source": [
"class Stock:\n",
" def init(self, name, code, PER, PBR, 배당수익률):\n",
" self.name = name\n",
" self.code = code\n",
" self.PER = PER\n",
" self.PBR = PBR\n",
" self.배당수익률 = 배당수익률\n",
" \n",
" def set_name(self, name):\n",
" self.name = name\n",
" \n",
" def set_code(self, code):\n",
" self.code = code\n",
" \n",
" def get_name(self, name):\n",
" return self.name\n",
" \n",
" def get_code(self, code):\n",
" return self.code\n",
" \n",
"\n",
" \n",
"# 삼성 = Stock(\"삼성전자\", \"005930\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xPoEjf9reTjd"
},
"source": [
"17 객체 생성\n",
"\n",
"16번에서 정의한 생성자를 통해 다음 정보를 갖는 객체를 생성해보세요.\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"id": "gINUml10eax9"
},
"outputs": [],
"source": [
"class Stock:\n",
" def init(self, name, code, PER, PBR, 배당수익률):\n",
" self.name = name\n",
" self.code = code\n",
" self.PER = PER\n",
" self.PBR = PBR\n",
" self.배당수익률 = 배당수익률\n",
" \n",
" def set_name(self, name):\n",
" self.name = name\n",
" \n",
" def set_code(self, code):\n",
" self.code = code\n",
" \n",
" def get_name(self, name):\n",
" return self.name\n",
" \n",
" def get_code(self, code):\n",
" return self.code\n",
" \n",
"삼성 = Stock(\"삼성전사\", \"005930\", 15.79, 1.33, 2.83)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "kU3Vi7MVefTq"
},
"source": [
"18 객체의 속성 수정\n",
"\n",
"PER, PBR, 배당수익률은 변경될 수 있는 값입니다. 이 값을 변경할 때 사용하는 set_per, set_pbr, set_dividend 메서드를 추가하세요."
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"id": "0QRxjVLEeh-9"
},
"outputs": [],
"source": [
"class Stock:\n",
" def init(self, name, code, PER, PBR, 배당수익률):\n",
" self.name = name\n",
" self.code = code\n",
" self.PER = PER\n",
" self.PBR = PBR\n",
" self.배당수익률 = 배당수익률\n",
" \n",
" def set_name(self, name):\n",
" self.name = name\n",
" \n",
" def set_code(self, code):\n",
" self.code = code\n",
" \n",
" def get_name(self, name):\n",
" return self.name\n",
" \n",
" def get_code(self, code):\n",
" return self.code\n",
" \n",
" def set_per(self, PER):\n",
" self.PER = PER\n",
"\n",
" def set_pbr(self, PBR):\n",
" self.PBR = PBR\n",
"\n",
" def set_dividend(self, 배당수익률):\n",
" self.배당수익률 = 배당수익률\n",
" \n",
" \n",
"삼성 = Stock(\"삼성전사\", \"005930\", 15.79, 1.33, 2.83)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "22SGXsEWeiT-"
},
"source": [
"19 객체의 속성 수정\n",
"\n",
"17번에서 생성한 객체에 set_per 메서드를 호출하여 per 값을 12.75로 수정해보세요."
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"id": "YhNfftObekBd"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"15.79\n",
"12.75\n"
]
}
],
"source": [
"class Stock:\n",
" def init(self, name, code, PER, PBR, 배당수익률):\n",
" self.name = name\n",
" self.code = code\n",
" self.PER = PER\n",
" self.PBR = PBR\n",
" self.배당수익률 = 배당수익률\n",
" \n",
" def set_name(self, name):\n",
" self.name = name\n",
" \n",
" def set_code(self, code):\n",
" self.code = code\n",
" \n",
" def get_name(self, name):\n",
" return self.name\n",
" \n",
" def get_code(self, code):\n",
" return self.code\n",
" \n",
" def set_per(self, PER):\n",
" self.PER = PER\n",
"\n",
" def set_pbr(self, PBR):\n",
" self.PBR = PBR\n",
"\n",
" def set_dividend(self, 배당수익률):\n",
" self.배당수익률 = 배당수익률\n",
" \n",
" \n",
"삼성 = Stock(\"삼성전사\", \"005930\", 15.79, 1.33, 2.83)\n",
"print(삼성.PER)\n",
"삼성.set_per(12.75)\n",
"print(삼성.PER)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zUp56JUrerRP"
},
"source": [
"20 여러 종목의 객체 생성\n",
"\n",
"아래의 표를 참조하여 3종목에 대해 객체를 생성하고 이를 파이썬 리스트에 저장하세요. 파이썬 리스트에 저장된 각 종목에 대해 for 루프를 통해 종목코드와 PER을 출력해보세요.\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"id": "ZVgjs_GAexVM"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"005930 15.79\n",
"005380 8.7\n",
"066570 317.34\n"
]
}
],
"source": [
"class Stock:\n",
" def init(self, name, code, PER, PBR, 배당수익률):\n",
" self.name = name\n",
" self.code = code\n",
" self.PER = PER\n",
" self.PBR = PBR\n",
" self.배당수익률 = 배당수익률\n",
" \n",
" def set_name(self, name):\n",
" self.name = name\n",
" \n",
" def set_code(self, code):\n",
" self.code = code\n",
" \n",
" def get_name(self, name):\n",
" return self.name\n",
" \n",
" def get_code(self, code):\n",
" return self.code\n",
" \n",
" def set_per(self, PER):\n",
" self.PER = PER\n",
"\n",
" def set_pbr(self, PBR):\n",
" self.PBR = PBR\n",
"\n",
" def set_dividend(self, 배당수익률):\n",
" self.배당수익률 = 배당수익률\n",
" \n",
" \n",
"삼성 = Stock(\"삼성전사\", \"005930\", 15.79, 1.33, 2.83)\n",
"현대 = Stock(\"현대차\", \"005380\", 8.70, 0.35, 4.27)\n",
"LG = Stock(\"LG전자\", \"066570\", 317.34,0.69, 1.37)\n",
"\n",
"종목 = []\n",
"\n",
"종목.append(삼성)\n",
"종목.append(현대)\n",
"종목.append(LG)\n",
"\n",
"for i in 종목:\n",
" print(i.code, i.PER)\n",
"\n",
"# print(삼성.PER)\n",
"# 삼성.set_per(12.75)\n",
"# print(삼성.PER)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4QVy64YGfQwR"
},
"source": [
"21 \n",
"\n",
"name, balance, bank를 속성으로 갖는 객체를 만드는 Account 클래스를 만드세요."
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"id": "zPvCfAQbfvnD"
},
"outputs": [],
"source": [
"class Account:\n",
" def init(self, name, balance, bank):\n",
" self.name = name\n",
" self.balance = balance\n",
" self.bank = bank"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xqX5iANie19v"
},
"source": [
"22 클래스 변수\n",
"\n",
"클래스 변수를 사용해서 Account 클래스로부터 생성된 계좌 객체의 개수를 저장하세요."
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"id": "XA-FWhRe8zc"
},
"outputs": [],
"source": [
"class Account:\n",
" def init(self, name, balance, bank):\n",
" self.name = name\n",
" self.balance = balance\n",
" self.bank = bank\n",
" \n",
" \n",
" account_len = 0 \n",
" account_len +=1"
]
},
{
"celltype": "markdown",
"metadata": {
"id": "WsY0LqrffAPX"
},
"source": [
"23 클래스 변수 출력\n",
"\n",
"Account 클래스로부터 생성된 계좌의 개수를 출력하는 get_account_num() 메서드를 추가하세요."
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"id": "jZJWvvTlfBQO"
},
"outputs": [],
"source": [
"class Account:\n",
" def init(self, name, balance, bank):\n",
" self.name = name\n",
" self.balance = balance\n",
" self.bank = bank\n",
" \n",
" \n",
" account_num = 0 \n",
" account_num +=1\n",
" \n",
" def get_account_num(num):\n",
" print(num.account_num)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "u6atU2JCfBtf"
},
"source": [
"24 입금 메서드\n",
"\n",
"Account 클래스에 입금을 위한 deposit 메서드를 추가하세요. 입금은 최소 1원 이상만 가능합니다."
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"id": "8TFBNkpIfFlb"
},
"outputs": [],
"source": [
"class Account:\n",
" def init(self, name, balance, bank):\n",
" self.name = name\n",
" self.balance = balance\n",
" self.bank = bank\n",
" \n",
" \n",
" account_num = 0 \n",
" account_num +=1\n",
" \n",
" def get_account_num(num):\n",
" print(num.account_num)\n",
" \n",
" def Deposit(self, deposit):\n",
" if deposit >= 1:\n",
" self.balance += deposit "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "KnFQ9Za7fop5"
},
"source": [
"25 출금 메서드\n",
"\n",
"Account 클래스에 출금을 위한 withdraw 메서드를 추가하세요. 출금은 계좌의 잔고 이상으로 출금할 수는 없습니다."
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"id": "OqE_PgDffrP6"
},
"outputs": [],
"source": [
"class Account:\n",
" def init(self, name, balance, bank):\n",
" self.name = name\n",
" self.balance = balance\n",
" self.bank = bank\n",
" \n",
" \n",
" account_num = 0 \n",
" account_num +=1\n",
" \n",
" def get_account_num(num):\n",
" print(num.account_num)\n",
" \n",
" def Deposit(self, deposit):\n",
" if deposit >= 1:\n",
" self.balance += deposit \n",
" \n",
" def withdraw(self, deposit):\n",
" if deposit <= balance:\n",
" self.balance -= deposit"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "49zhaqGxfrvm"
},
"source": [
"26 정보 출력 메서드\n",
"\n",
"Account 인스턴스에 저장된 정보를 출력하는 display_info() 메서드를 추가하세요. \n",
"\n",
"\n", "은행이름: SC은행\n", "예금주: 파이썬\n", "잔고: 10,000원\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"id": "5NUCRVVGf3xx"
},
"outputs": [],
"source": [
"class Account:\n",
" def init(self, name, balance, bank):\n",
" self.name = name\n",
" self.balance = balance\n",
" self.bank = bank\n",
" \n",
" \n",
" account_num = 0 \n",
" account_num +=1\n",
" \n",
" def get_account_num(num):\n",
" print(num.account_num)\n",
" \n",
" def Deposit(self, deposit):\n",
" if deposit >= 1:\n",
" self.balance += deposit \n",
" \n",
" def withdraw(self, deposit):\n",
" if deposit <= balance:\n",
" self.balance -= deposit\n",
" \n",
" def display_info(self):\n",
" print(\"은행이름: \", self.bank)\n",
" print(\"예금주: \", self.name)\n",
" print(\"계좌번호: \", self.account_number)\n",
" print(\"잔고: \", self.balance)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gwZdEEJ0f5k8"
},
"source": [
"27 이자 지급하기\n",
"\n",
"입금 횟수가 5회가 될 때 잔고를 기준으로 1%의 이자가 잔고에 추가되도록 코드를 변경해보세요."
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"id": "cCEHzqi0f6pJ"
},
"outputs": [],
"source": [
"class Account:\n",
" def init(self, name, balance, bank):\n",
" self.name = name\n",
" self.balance = balance\n",
" self.bank = bank\n",
" \n",
" \n",
" account_num = 0 \n",
" account_num +=1\n",
" \n",
" def get_account_num(num):\n",
" print(num.account_num)\n",
" \n",
" def Deposit(self, deposit):\n",
" if deposit >= 1:\n",
" self.balance += deposit \n",
" \n",
" self.deposit_count += 1\n",
" if self.deposit_count % 5 == 0:\n",
" self.balance = (self.balance * 1.01)\n",
" \n",
" def withdraw(self, deposit):\n",
" if deposit <= balance:\n",
" self.balance -= deposit\n",
" \n",
" def display_info(self):\n",
" print(\"은행이름: \", self.bank)\n",
" print(\"예금주: \", self.name)\n",
" print(\"계좌번호: \", self.account_number)\n",
" print(\"잔고: \", self.balance)\n",
" \n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AubtkE8jf7NP"
},
"source": [
"28 여러 객체 생성\n",
"\n",
"Account 클래스로부터 3개 이상 인스턴스를 생성하고 생성된 인스턴스를 리스트에 저장해보세요."
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"id": "u6Bc1tFJf8zh"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[<main.Account object at 0x000002710D43EAA0>, <main.Account object at 0x000002710D43F730>, <main.Account object at 0x000002710D423370>]\n"
]
}
],
"source": [
"class Account:\n",
" def init(self, name, balance, bank):\n",
" self.name = name\n",
" self.balance = balance\n",
" self.bank = bank\n",
" \n",
" \n",
" account_num = 0 \n",
" account_num +=1\n",
" \n",
" def get_account_num(num):\n",
" print(num.account_num)\n",
" \n",
" def Deposit(self, deposit):\n",
" if deposit >= 1:\n",
" self.balance += deposit \n",
" \n",
" self.deposit_count += 1\n",
" if self.deposit_count % 5 == 0:\n",
" self.balance = (self.balance 1.01)\n",
" \n",
" def withdraw(self, deposit):\n",
" if deposit <= balance:\n",
" self.balance -= deposit\n",
" \n",
" def display_info(self):\n",
" print(\"은행이름: \", self.bank)\n",
" print(\"예금주: \", self.name)\n",
" print(\"계좌번호: \", self.account_number)\n",
" print(\"잔고: \", self.balance)\n",
" \n",
"k = Account(\"KIM\", 10000000, \"신한\")\n",
"l = Account(\"LEE\", 10000, \"기업\")\n",
"p = Account(\"PARK\", 10000, \"국민\")\n",
"\n",
"man = [k, l, p]\n",
"\n",
"print(man)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "b2kpPC5Qf-XQ"
},
"source": [
"29 객체 순회\n",
"\n",
"반복문을 통해 리스트에 있는 객체를 순회하면서 잔고가 100만원 이상인 고객의 정보만 출력하세요."
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"id": "Yi5TXjS0f_FI"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<main.Account object at 0x000002710D423A00>\n"
]
}
],
"source": [
"class Account:\n",
" def init(self, name, balance, bank):\n",
" self.name = name\n",
" self.balance = balance\n",
" self.bank = bank\n",
" \n",
" \n",
" account_num = 0 \n",
" account_num +=1\n",
" \n",
" def get_account_num(num):\n",
" print(num.account_num)\n",
" \n",
" def Deposit(self, deposit):\n",
" if deposit >= 1:\n",
" self.balance += deposit \n",
" \n",
" self.deposit_count += 1\n",
" if self.deposit_count % 5 == 0:\n",
" self.balance = (self.balance 1.01)\n",
" \n",
" def withdraw(self, deposit):\n",
" if deposit <= balance:\n",
" self.balance -= deposit\n",
" \n",
" def display_info(self):\n",
" print(\"은행이름: \", self.bank)\n",
" print(\"예금주: \", self.name)\n",
" print(\"계좌번호: \", self.account_number)\n",
" print(\"잔고: \", self.balance)\n",
" \n",
"k = Account(\"KIM\", 10000000, \"신한\")\n",
"l = Account(\"LEE\", 10000, \"기업\")\n",
"p = Account(\"PARK\", 10000, \"국민\")\n",
"\n",
"man = [k, l, p]\n",
"\n",
"for i in man:\n",
" if i.balance > 1000000:\n",
" print(i)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "i-biPeVOf_gT"
},
"source": [
"30 입출금 내역\n",
"\n",
"입금과 출금 내역이 기록되도록 코드를 업데이트 하세요. 입금 내역과 출금 내역을 출력하는 deposit_history와 withdraw_history 메서드를 추가하세요.\n",
"\n",
"힌트: 리스트"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"id": "OKEjxLEGgU2D"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"은행이름: 신한\n",
"예금주: KIM\n",
"잔고: 10000000\n"
]
}
],
"source": [
"class Account:\n",
" def init(self, name, balance, bank):\n",
" self.name = name\n",
" self.balance = balance\n",
" self.bank = bank\n",
" \n",
" \n",
" account_num = 0 \n",
" account_num +=1\n",
" \n",
" def get_account_num(num):\n",
" print(num.account_num)\n",
" \n",
" def Deposit(self, deposit):\n",
" if deposit >= 1:\n",
" self.balance += deposit \n",
" \n",
" self.deposit_count += 1\n",
" if self.deposit_count % 5 == 0:\n",
" self.balance = (self.balance * 1.01)\n",
" \n",
" def withdraw(self, deposit):\n",
" if deposit <= balance:\n",
" self.balance -= deposit\n",
" \n",
" def display_info(self):\n",
" print(\"은행이름: \", self.bank)\n",
" print(\"예금주: \", self.name)\n",
" print(\"잔고: \", self.balance)\n",
" \n",
" def deposit_history(self):\n",
" for amount in self.deposit_log:\n",
" print(amount) \n",
" \n",
"k = Account(\"KIM\", 10000000, \"신한\")\n",
"l = Account(\"LEE\", 10000, \"기업\")\n",
"p = Account(\"PARK\", 10000, \"국민\")\n",
"\n",
"man = [k, l, p]\n",
"\n",
"# for i in man:\n",
"# if i.balance > 1000000:\n",
"# print(i)\n",
"k.display_info()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ylp3u1eagW1Z"
},
"source": [
"31 클래스 정의\n",
"\n",
"다음 코드가 동작하도록 차 클래스를 정의하세요.\n",
"\n",
"\n", ">> car = 차(2, 1000)\n", ">> car.바퀴\n", "2\n", ">> car.가격\n", "1000\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {
"id": "8mTbFqU4gahv"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2\n",
"1000\n"
]
}
],
"source": [
"class 차:\n",
" def init(self, 바퀴, 가격):\n",
" self.바퀴 = 바퀴\n",
" self.가격 = 가격\n",
" \n",
"car = 차(2, 1000)\n",
"print(car.바퀴)\n",
"print(car.가격)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FVMUospdga9v"
},
"source": [
"32 클래스 상속\n",
"\n",
"차 클래스를 상속받은 자전차 클래스를 정의하세요."
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {
"id": "VJO5OKelgdG3"
},
"outputs": [],
"source": [
"class 차:\n",
" def init(self, 바퀴, 가격):\n",
" self.바퀴 = 바퀴\n",
" self.가격 = 가격\n",
"\n",
"\n",
"class 자전차(차):\n",
" pass"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "w4F-7vCggdmX"
},
"source": [
"33 클래스 상속\n",
"다음 코드가 동작하도록 자전차 클래스를 정의하세요. 단 자전차 클래스는 차 클래스를 상속받습니다.\n",
"\n",
"\n", ">> bicycle = 자전차(2, 100)\n", ">> bicycle.가격\n", "100\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"id": "dKJe5VGigfgv"
},
"outputs": [
{
"data": {
"text/plain": [
"100"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class 자전차(차):\n",
" def init(self, 바퀴, 가격):\n",
" super().init(바퀴, 가격)\n",
" \n",
"bicycle = 자전차(2, 100)\n",
"bicycle.가격"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_LbkCDFfglL"
},
"source": [
"34 클래스 상속\n",
"\n",
"다음 코드가 동작하도록 자전차 클래스를 정의하세요. 단 자전차 클래스는 차 클래스를 상속받습니다.\n",
"\n",
"\n", ">> bicycle = 자전차(2, 100, \"시마노\")\n", ">> bicycle.구동계\n", "시마노\n", "
"
]
},
{
"celltype": "code",
"execution_count": 93,
"metadata": {
"id": "eesN9ZvQgpNP"
},
"outputs": [
{
"data": {
"text/plain": [
"'시마노'"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class 차:\n",
" def init(self, 바퀴, 가격):\n",
" self.바퀴 = 바퀴\n",
" self.가격 = 가격\n",
"\n",
"class 자전차(차):\n",
" def init(self, 바퀴, 가격, 구동계):\n",
" super().init(바퀴, 가격)\n",
" self.구동계 = 구동계\n",
"\n",
"bicycle = 자전차(2, 100, \"시마노\")\n",
"bicycle.구동계"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SQZpnTPsgrse"
},
"source": [
"35 클래스 상속\n",
"\n",
"다음 코드가 동작하도록 차 클래스를 상속받는 자동차 클래스를 정의하세요.\n",
"\n",
"\n", ">> car = 자동차(4, 1000)\n", ">> car.정보()\n", "바퀴수 4\n", "가격 1000\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"id": "JZ4-lefXgrci"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"바퀴수 4\n",
"가격 1000\n"
]
}
],
"source": [
"class 차:\n",
" def init(self, 바퀴, 가격):\n",
" self.바퀴 = 바퀴\n",
" self.가격 = 가격\n",
" \n",
"class 자동차(차):\n",
" def init(self, 바퀴, 가격):\n",
" super().init(바퀴, 가격)\n",
" \n",
" def 정보(self):\n",
" print(\"바퀴수 \", self.바퀴)\n",
" print(\"가격 \", self.가격)\n",
" \n",
"car = 자동차(4, 1000)\n",
"car.정보()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zWwZ0rvXgwVE"
},
"source": [
"36 부모 클래스 생성자 호출\n",
"\n",
"다음 코드가 동작하도록 '차' 클래스를 수정하세요.\n",
"\n",
"\n", ">> bicycle = 자전차(2, 100, \"시마노\")\n", ">> bicycle.정보()\n", "바퀴수 2\n", "가격 100\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"id": "wTZ14Hclg5g"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"바퀴수 2\n",
"가격 100\n"
]
}
],
"source": [
"class 차:\n",
" def init(self, 바퀴, 가격, 구동계):\n",
" self.바퀴 = 바퀴\n",
" self.가격 = 가격\n",
" self.구동계 = 구동계\n",
" \n",
" def 정보(self):\n",
" print(\"바퀴수 \", self.바퀴)\n",
" print(\"가격 \", self.가격)\n",
" \n",
"class 자전차(차):\n",
" def init(self, 바퀴, 가격, 구동계):\n",
" super().init(바퀴, 가격, 구동계)\n",
" \n",
"class 자동차(차):\n",
" def init(self, 바퀴, 가격):\n",
" super().init(바퀴, 가격)\n",
"\n",
"bicycle = 자전차(2, 100, \"시마노\")\n",
"bicycle.정보()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bRWhsJrsg7rD"
},
"source": [
"37 부모 클래스 메서드 호출\n",
"\n",
"'자전차의 정보() 메서드'로 구동계 정보까지 출력하도록 수정해보세요.\n",
"\n",
"\n", ">> bicycle = 자전차(2, 100, \"시마노\")\n", ">> bicycle.정보()\n", "바퀴수 2\n", "가격 100\n", "구동계 시마노\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"id": "QOsmyUxPg-Gv"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"바퀴수 2\n",
"가격 100\n",
"구동계 시마노\n"
]
}
],
"source": [
"class 차:\n",
" def init(self, 바퀴, 가격, 구동계):\n",
" self.바퀴 = 바퀴\n",
" self.가격 = 가격\n",
" self.구동계 = 구동계\n",
" \n",
" def 정보(self):\n",
" print(\"바퀴수 \", self.바퀴)\n",
" print(\"가격 \", self.가격)\n",
" print(\"구동계\", self.구동계)\n",
" \n",
"class 자전차(차):\n",
" def init(self, 바퀴, 가격, 구동계):\n",
" super().init(바퀴, 가격, 구동계)\n",
" \n",
"class 자동차(차):\n",
" def init(self, 바퀴, 가격):\n",
" super().init(바퀴, 가격)\n",
"\n",
"bicycle = 자전차(2, 100, \"시마노\")\n",
"bicycle.정보()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MXBGuvJxhI9f"
},
"source": [
"38 메서드 오버라이딩\n",
"\n",
"다음 코드의 실행 결과를 예상해보세요.\n",
"\n",
"\n", "class 부모:\n", " def 호출(self):\n", " print(\"부모호출\")\n", "\n", "class 자식(부모):\n", " def 호출(self):\n", " print(\"자식호출\")\n", "나 = 자식()\n", "나.호출()\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {
"id": "R5wPDRVihLeu"
},
"outputs": [],
"source": [
"# 자식호출"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Vi3Ax_iphObL"
},
"source": [
"39 생성자\n",
"\n",
"다음 코드의 실행 결과를 예상해보세요.\n",
"\n",
"\n", "class 부모:\n", " def __init__(self):\n", " print(\"부모생성\")\n", "\n", "class 자식(부모):\n", " def __init__(self):\n", " print(\"자식생성\")\n", "나 = 자식()\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {
"id": "bJTKl-qlhayt"
},
"outputs": [],
"source": [
"# 자식생성"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZWfsLYEBhcM2"
},
"source": [
"40 부모클래스 생성자 호출\n",
"\n",
"다음 코드의 실행 결과를 예상해보세요.\n",
"\n",
"\n", "class 부모:\n", " def __init__(self):\n", " print(\"부모생성\")\n", "\n", "class 자식(부모):\n", " def __init__(self):\n", " print(\"자식생성\")\n", " super().__init__()\n", "\n", "나 = 자식()\n", "
"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {
"id": "jQBrS8fFhgDN"
},
"outputs": [],
"source": [
"# 슈퍼이닛을 통해 모클래스의 값도 불러온다."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.9"
}
},
"nbformat": 4,
"nbformat_minor": 1
}