Monday (01.06)
์ค๋์ ์ ์ฌ
๋ณ์ โญ๏ธโญ๏ธโญ๏ธ
ํ๋ฒํ ์ฅ๋ฐฅ๋ง, ์ ์ก์ ๋ฌ๋ค ..
ํ์ ํํธ
ํ์ ํํธ: ํจ์๋ ๋ณ์์ ๋ฐ์ดํฐ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ง์ ํด์ฃผ๋ ์ฃผ์๊ณผ ๋น์ทํ ๊ฐ๋
def add(a: int, b: int) -> int:
return a + b
add('5', 3) # ํ์
ํํธ์ ๋ค๋ฅด์ง๋ง ์คํ์ ๋จ
์ด๋, ์๋ฃํ ๊ฐ์ ๋ ๋ถ๊ฐ๋ฅํจ. ํ์ด์ฌ์ ๋์ ํ์ดํ ์ธ์ด์ด๊ธฐ์ ๋ฐ์ดํฐ ํ์ ์ด ์คํ ์ค์ ๋ณ๊ฒฝ๋ ์ ์๋ค.
ํ์
ํํธ๋ ๊ฐ๋
์ฑ์ ์ํด ์ฌ์ฉํ๋ฉฐ, ์๋ฃํ ๊ฐ์ ๋ฅผ ์ํ๋ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ ์ญ๋ณ์, ์ง์ญ๋ณ์
์ ์ญ๋ณ์์ ์ง์ญ๋ณ์๋ฅผ ๋๋ ์ ์ฌ์ฉํ๋ ์ด์ → ์ ์ญ๋ณ์๋ ์ํํ๊ธฐ ๋๋ฌธ
์ง์ญ๋ณ์ ์ฌ์ฉ์ ์งํฅํ๋ฉฐ, ์ถ๊ฐ์ ์ผ๋ก ํด๋น ์ง์ญ๋ณ์๋ฅผ ์ ์ญ๋ณ์ํ ์ํค๊ณ ์ถ๋ค๋ฉด, global ํค์๋๋ฅผ ์ฌ์ฉํ์
์ฌ๊ทํจ์
์ฌ๊ทํจ์๋ฅผ ๊ธฐํผํ๋ ๊ณผ๊ฑฐ์ ๋ฌ๋ฆฌ, ๋น์ ํ ๋ฐ์ดํฐ์ ์๊ฐ ๋์ด๋จ์ ๋ฐ๋ผ ํ์ฌ๋ ์ฌ๊ทํจ์๋ํ ์์ฃผ ์ฌ์ฉํ๋ ์ถ์ธ์ด๋ค.
ํจ์๋ ์คํ๋ฉ๋ชจ๋ฆฌ์์ ์คํ์ด ๋๋ฏ๋ก LIFO๊ตฌ์กฐ์ ๋ฐ๋ผ ๋์ํ์ฌ ๋ง์ง๋ง์ ํธ์ถ๋ ํจ์๊ฐ ๋จผ์ ์คํ๋๋ค.
example = [[1,2,3], [4,[5,6]],7,[8,[9]]]
# output = [1,2,3,4,5,6,7,8,9]
def recur(example):
arr=[]
for item in example:
if isinstance(item,list):
arr.extend(recur(item))
else:
arr.append(item)
return arr
print(recur(example))
์ด๋, arr.extend(recur(item))๋ฅผ ์จ์ผํ๋ค. ์ฒ์์ arr.append(recur(item)) ์ฐ๋๊น ์๋๋๋ฐ
์ฐจ์์ด ๋ค๋ฅธ ๋ฆฌ์คํธ์ ์์๋ฅผ ํํํ ํ๋ ๊ฒ์ด๊ธฐ์, ๊ฐ ๋ฆฌ์คํธ์ ํญ๋ชฉ์ ๊ฐ๋ณ์ ์ผ๋ก ํ์ด์ ์ถ๊ฐํด์ผ ํ๋ค.
extend()๋ ์ด ์์ ์ ์ํํ๋ ๋ฐ๋ฉด, append()๋ ์ค์ฒฉ๋ ๋ฆฌ์คํธ๋ฅผ ๊ทธ๋๋ก ๋ฃ๊ธฐ๋๋ฌธ์ ๋ฆฌ์คํธ๊ฐ ํํํ ์ ์ฉ์ด ์๋๋ค.
์ถ๊ฐ๋ก arr.extend(item)์ ์๋๋ค.
- append, extend ๋ชจ๋ ์ฝ์ ํ๋ ๋น์ทํ ์ญํ ์ ํ์ง๋ง ์ฐจ์ด์ ์ด ์กด์ฌ
- append๋ ๋ฆฌ์คํธ์ ๋จ์ผ ํญ๋ชฉ ์ถ๊ฐ์ ์ ์ฉํ๋ ๋ฐ๋ฉด extend๋ iterable ๊ฐ์ฒด์๋ง ์ ์ฉํ ์ ์๊ณ ,
- append๋ ์๋ ๊ทธ๋๋ก ๋ฃ๋ ๋ฐ๋ฉด extend๋ iterable ๊ฐ์ฒด๋ฅผ ํ์ด์ ๋ฃ๋๋ค.
ํจ์ํ ๋ฌธ๋ฒ์๋ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์๋ค.
- ๊ณ ์ฐจ ํจ์(ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฑฐ๋ ๋ฐํ)
- map(), filter(), reduce()
- lambda ํจ์
- ๋ฆฌ์คํธ/์ /์ ๋๋ ์ดํฐ ์ปดํ๋ฆฌํจ์
- any(), all(), sorted()
์ด ์ค ๋ช๊ฐ์ง๋ฅผ ์ ๋ฆฌํด๋ณด์
์ต๋ช ํจ์
Lambda, ์ฐ๊ณ ๋ฒ๋ฆฌ๋ ํจ์๋ก, ํจ์๋ช ์ ๊ฐ์ง ํจ์ ๋ํ ๋ง๋ค ์ ์๋ค.
์ฌ์ฉ๋ฒ: lambda ํ๋ผ๋ฏธํฐ:๋ช ๋ น์ด
minus = lambda a,b:a-b
print(minus(4,3))
divide = lambda a,b:a//b
print(divide(12,3))
points = [(3,2),(1,0),(1,1),(3,2)]
#y์ขํ ์์ผ๋ก ์ ๋ ฌ -> lambda ์ฌ์ฉ
sorted(points, key = lambda points:points[1])
List Comprehension
๊ธฐ์กด ๋ฆฌ์คํธ๋ก ๋ค๋ฅธ ๋ฆฌ์คํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ → ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ํจ
for + append ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๋ค.
์ฌ์ฉ๋ฒ: [(๋ณ์์ ์ ์ฉํ ์์) for (๋ณ์) in (for๋ฌธ์ด ๋์๊ฐ๋ ๋ฒ์) (์กฐ๊ฑด๋ฌธ)]
#for ๋ฌธ์ ํ์ฉํด์ 1~6 ๋ด๊ธด ๋ฆฌ์คํธ
list1=[]
for i in range(1,7):
list1.append(i)
print(list1)
#list comprehension ํ์ฉ
list2 = [x for x in range(1,7)]
print(list2)
# 2์ ๋ฐฐ์
result =[ x for x in range(1,12) if x%2==0]
print(result)
num = '12345' # ์ธ๋ถ๋ฐ๋ณต๋ฌธ
word = 'ABCDE' # ๋ด๋ถ๋ฐ๋ณต๋ฌธ
arr=[]
# for๋ฌธ
for i in range(len(num)):
for j in range(len(word)):
if str(num[i]) != word[j]:
arr.append(str(num[i]) + word[j])
#list comprehension
arr=[str(num[i]) + word[j] for i in range(len(num)) for j in range(len(word)) if str(num[i]) != word[j]]
print(arr)
map
- iterable๊ฐ์ฒด์ ๊ฐ ์์์ ๋์ผํ ํจ์๋ฅผ ์ ์ฉํ ๋ ์ฌ์ฉ, ๋ฉ๋ชจ๋ฆฌ ํจ์จ์
- ๋๋ค์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ํธํ๋ค.
words = ['apple', 'banana', 'cherry']
list(map(str.upper,words)) #์ถ๋ ฅ: ['APPLE', 'BANANA', 'CHERRY']
string_floats = ['1.1', '2.2', '3.3', '4.4', '5.5']
list(map(float,string_floats)) #์ถ๋ ฅ: [1.1, 2.2, 3.3, 4.4, 5.5]
li = [1, 2, 3, 4, 5]
tuple(map(lambda x: x+1,li)) #์ถ๋ ฅ: (2, 3, 4, 5, 6)
filter
- iterable๊ฐ์ฒด์ ๊ฐ ์์์ ๋ํด function์ด ์ฐธ์ธ ๊ฒ๋ง ๋ฐํ
def even(x):
if x%2 ==0:
return x
list(map(even,li)) #์กฐ๊ฑด ๋ง์กฑ ์ํ๋ ๋ฐฉ์๋ None์ ์ฑ์๋ฃ์ ์ถ๋ ฅ: [None, 2, None, 4, None]
list(filter(even,li)) #์กฐ๊ฑด ๋ง์กฑ ํ๋ ๊ฒ๋ง ์ถ๋ ฅ: [2, 4]
enumerate
- ๋ฆฌ์คํธ์ ์์๋ฅผ ์ถ์ถํ ๋ ๋ฒํธ๋ฅผ ๋ถ์ฌ์ ์ถ์ถ
list1 = ['์ฌ๊ณผ', '๋ฐ๋๋', '๋ธ๊ธฐ', 'ํฌ๋', 'ํค์']
for a,b in enumerate(list1):
print(a+1,": ",b)
#์ถ๋ ฅ
'''
1 : ์ฌ๊ณผ
2 : ๋ฐ๋๋
3 : ๋ธ๊ธฐ
4 : ํฌ๋
5 : ํค์
'''
zip
- zip(list,list): 2๊ฐ ์ด์์ ๋ฆฌ์คํธ๋ฅผ ํฉ์น๋ฉฐ, ๊ธธ์ด๋ฅผ ํ์ธํ์ง ์์ผ๋ฉด ๋๋ฝ๋ ์ ์๋ค๋ ์ฃผ์์
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
result = zip(list1, list2)
print(list(result))
# ์ถ๋ ฅ: [(1, 'a'), (2, 'b'), (3, 'c')]
pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
list1, list2 = zip(*pairs)
print(list1)
print(list2)
# ์ถ๋ ฅ
# (1, 2, 3)
# ('a', 'b', 'c')
reduce
- ๋ฆฌ์คํธ์ ์์๋ค์ ๋์ ํ์ฌ ๋ํจ
- ๋์ ํฉ ์ฌ์ฉ์ ์ข๋ค. sum ์ด ์์ง๋ง, ๋ค๋ฅธ ์ฐจ์์ ๊ณ์ฐ๋ ํ ์ ์๋ค๋ ์ ์์ ์ ์ฉํ๋ค.
from functools import reduce
nums = [1, 2, 3, 4]
result = reduce(lambda x, y: x + y, nums) # 1+2 -> 3, 3+3 -> 6, 6+4 -> 10
print(result) # ์ถ๋ ฅ: 10
test = [{'name' : 'a', 'age' : 1}, {'name' : 'b', 'age' : 2}, {'name' : 'c', 'age' : 3}]
reduce(lambda x,y:x['age']+y['age'], test,0) #์คํจ
reduce(lambda x,y:x+y['age'], test,0) #์ฑ๊ณต
์คํจ์ฝ๋
x['age'] + y['age'] ๋ถ๋ถ์์ x์ y๊ฐ ๋์
๋๋ฆฌ์ผ ๋, x['age']์ y['age']๋ฅผ ๋ํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ
์ฒซ ๋ฒ์งธ ์ฝ๋์์ x['age']๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด x๊ฐ ๋์
๋๋ฆฌ์ฌ์ผ ํ์ง๋ง, ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต์์ x๊ฐ 0์ด๊ธฐ ๋๋ฌธ์ ๋์
๋๋ฆฌ๊ฐ ์๋ -> x['age']์์ ์ค๋ฅ
์ฑ๊ณต์ฝ๋
- ์ฒซ ๋ฒ์งธ ํธ์ถ: x = 0, y = {'name': 'a', 'age': 1}
x + y['age'] = 0 + 1 = 1 - ๋ ๋ฒ์งธ ํธ์ถ: x = 1, y = {'name': 'b', 'age': 2}
x + y['age'] = 1 + 2 = 3 - ์ธ ๋ฒ์งธ ํธ์ถ: x = 3, y = {'name': 'c', 'age': 3}
x + y['age'] = 3 + 3 = 6
ํ์ด์ฌ ํ์ผ
ํ์ผ์ ์ฝ๊ณ ์ฐ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ ์กด์ฌ
- 1: ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ , ์์ธ ์ฒ๋ฆฌ์ ํ์ผ ๋ซ๊ธฐ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํด ์ฃผ๊ธฐ ๋๋ฌธ์ ๋ ์์
with open('ํ์ผ๋ช
', '๋ชจ๋') as file:
print('๋ด์ฉ', file=file)
- 2: ํ์ผ์ ๋ช ์์ ์ผ๋ก ์ด๊ณ ๋ซ์ ์ ์์ง๋ง, ํ์ผ์ ๋ซ์ง ์๋ ์ค์๊ฐ ๋ฐ์ํ ์ ์์ด ์กฐ์ฌํด์ผ ํ๋ค.
# 1. ํ์ผ ์์ฑ ๋ฐ ์ด๊ธฐ
file = open('ํ์ผ๋ช
', '๋ชจ๋')
# 2. ์ฌ์ฉํ ๋ชจ๋ ์ง์ (r, w, a)
file.write("๋ด์ฉ")
# 3. ํ์ผ๋ซ๊ธฐ
file.close()
f2 = open('test2.txt','w')
print("์๋ก์ด ํ์ผ์
๋๋ค",file=f2)
#๋ซ๊ธฐ ์ ๊น์ง๋ ๋ฉ๋ชจ๋ฆฌ์๋ง ๋ฐ์ดํฐ ์ ์ฅํ๋ค๊ฐ, ํ์ผ ๋ซ์ผ๋ฉด ๊ทธ๋ ๋ฐ์ดํฐ ์ ์ฅ
f2.close()
#์์ ์ด ๋น๋ฒํ๋ฉด ํ์ผ์ ๊ณ์ ์ด์ด๋๊ณ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ก ๋ฐ์ -> ๋ฉ๋ชจ๋ฆฌ ์ธก๋ฉด์์ ๋นํจ์จ์
f2 = open('test2.txt','w')
print("์๋ก์ด ํ์ผ์
๋๋ค",file=f2, flush=True)
with open('test3.txt', 'r') as r_test:
# read()
content = r_test.read()
print('read():', content)
# readable()
print('readable():', r_test.readable())
# readline()
r_test.seek(0) # ํ์ผ์ ์ฒ์์ผ๋ก ์ด๋ (readline์ ํ ๋ฒ๋ง ์ฝ์ผ๋ฏ๋ก)
while True:
line = r_test.readline()
if line =='':
break
print('readline(): ',line, end='')
# readlines()
r_test.seek(0) # ํ์ผ์ ์ฒ์์ผ๋ก ์ด๋
lines = r_test.readlines()
print('readlines():', lines)
# test3.txt ์์
Hello, this is the first line.
This is the second line.
And here is the third line.
Finally, the fourth line.
# read()
read(): Hello, this is the first line.
This is the second line.
And here is the third line.
Finally, the fourth line.
# readable()
readable(): True
# readline()
readline(): Hello, this is the first line.
readline(): This is the second line.
readline(): And here is the third line.
readline(): Finally, the fourth line.
# readlines()
readlines(): ['Hello, this is the first line.\n', 'This is the second line.\n', "And here is the third line.\n", 'Finally, the fourth line.\n']
์ถ๊ฐ: print()์ ๋งค๊ฐ๋ณ์ end, sep ๋น๊ต
end: ์ถ๋ ฅ ๋ค์ ๋ง๋ถ์ผ ๋ฌธ์์ด์ ์ค์ , ๊ธฐ๋ณธ๊ฐ์ ์ค๋ฐ๊ฟ(\n)
print("Hello", end=" ") → "Hello " ๋ค์ ๊ณต๋ฐฑ์ ์ถ๊ฐํ๊ณ ์ค๋ฐ๊ฟํ์ง ์์.
sep: ์ฌ๋ฌ ๊ฐ์ ์ถ๋ ฅํ ๋ ๊ฐ ๊ฐ ์ฌ์ด์ ๋ค์ด๊ฐ ๊ตฌ๋ถ์๋ฅผ ์ค์ , ๊ธฐ๋ณธ๊ฐ์ ๊ณต๋ฐฑ(' ')
print("Hello", "world", sep="-") → "Hello-world"๋ก ๊ตฌ๋ถ์๋ฅผ -๋ก ์ค์ .
Tuesday (01.07)
์ค๋์ ์ ์ฌ
๋ณ์ โญ๏ธโญ๏ธโญ๏ธ
๋๊น์ฐ๋ ๋จ๊ฒ๊ณ ๋ง์์๋ค. ๋ฐฅ์ด ๋ฐ๋ฅ์ ๋๋ฌ๋ถ์๊ฒ ์์ฌ์ ๋ค.
๋ชจ๋
'.py' ํ์ฅ์๋ฅผ ๊ฐ์ง Python ํ์ผ๋ก, ํจ์, ํด๋์ค, ๋ณ์๋ฅผ ์ ์ํ์ฌ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋๋ก ๋ง๋ฆ
- ์ ์ฒด ๋ชจ๋์ import
import math1
print(math1.plus(3, 4))
- ํน์ ํจ์๋ง import
from math1 import plus
print(plus(3, 4)) # ๋ง์
ํจ์ ์ง์ ์ฌ์ฉ
- ๋ชจ๋ importํ๊ณ ๋ค์ importํด๋ ๋ถ๋ฌ์จ ๋ชจ๋ ์ฌ์ฌ์ฉ -> ๋ถํ์ํ ๋ชจ๋ ๋ก๋ฉ์ ๋ฐฉ์ง
ํ์ผ๋ช ์ ๋ชจ๋๋ช ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ '๋ชจ๋ ์ด๋ฆ'๊ณผ 'ํ์ผ ์ด๋ฆ'์ด ๊ฒน์น์ง ์๋๋ก ์ฃผ์
๊ฒฝ๋ก๋ฅผ '.' '/' ๋ก ๊ตฌ๋ถํ๋ ๋ฐฉ์์ ์ฃผ์
- ํ์ผ ์์คํ
์์ '/'๋ฅผ ์ฌ์ฉํด ๋๋ ํ ๋ฆฌ ๋ฐ ํ์ผ์ ๊ตฌ๋ถ
- %%writefile /content/drive/MyDrive/package/math1.py
- Python ์์ '.'์ ์ฌ์ฉํด ๊ฒฝ๋ก ์ง์
- from drive.MyDrive.package import math1
- ๋ณ์นญ(alias) ์ฌ์ฉ
import math1 as m
print(m.๋ง์
(3, 4))
ํจํค์ง
์ฌ๋ฌ ๋ชจ๋์ ๋ฌถ์ด์ ๊ด๋ฆฌํ๋ ๋๋ ํ ๋ฆฌ
Pytho 3.x ์ด์ ๊น์ง๋ __init__ ํ์ผ์ด ์์ด์ผ ํจํค์ง๋ก ์ธ์
-> ์ดํ๋ถํฐ __init__ ํ์ผ์ด ์์ด๋ ํจํค์ง๋ก ์ธ์ํ์ง๋ง, ์ฅ๊ณ ๊ฐ์ ์ ํต์ ์ธ ํ๋ ์์ํฌ๋ __init__.py๋ฅผ ์๊ตฌํ๋ค.
์์ธ์ฒ๋ฆฌ
์ฝ๋ ์คํ ์ค์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ๋ฏธ๋ฆฌ ์์ธกํ๊ฑฐ๋, ๋ฐ์ํ ํ ์ด๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌ
- ์ปดํ์ผ ์๋ฌ
- ๊ฐ๋ฐ์๊ฐ ์ฝ๋ ์คํ ์ ์ ๋ฐ์ํ๋ ์๋ฌ๋ก ๊ฐ๋ฐ์๊ฐ ์์ ๊ฐ๋ฅ
- ex) ๋ฌธ๋ฒ ์ค๋ฅ
- ๋ฐํ์ ์๋ฌ
- ์ฝ๋ ์คํ ์ค ๋ฐ์ํ๋ ์๋ฌ๋ก, ๊ฐ๋ฐ์๊ฐ ์คํ ์ ์ ํด๊ฒฐ ๋ถ๊ฐ
- 0์ผ๋ก ๋๋๊ธฐ, ํ์ผ ์ด ์ ์๋ ๋ฌธ์
์์ธ์ฒ๋ฆฌ
๋ฐํ์ ์๋ฌ๋ฅผ ๋ฐ์ ํ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
try: ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ ์ฝ๋๋ฅผ ๊ฐ์ํ๋ ๋ธ๋ก
except: ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ฒ๋ฆฌํ๋ ๋ธ๋ก
else: ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ์คํ๋๋ ๋ธ๋ก (์ ํ์ )
finally: ์์ธ ๋ฐ์ ์ฌ๋ถ์ ๊ด๊ณ์์ด ํญ์ ์คํ๋๋ ๋ธ๋ก (์ ํ์ )
try:
a = input('์ ์ ์
๋ ฅ: ')
# ValueError: invalid literal for int() with base 10: '์ญ์ผ'
if int(a) > 0:
print('True')
else:
print('์๋ชป ์
๋ ฅํ์
จ์ต๋๋ค')
# ValueError: invalid literal for int() with base 10: '๋ฐฑ์ด์ญ์ผ'
except ValueError as e: # ์ซ์๋ก ๋ณํํ ์ ์๋ ๊ฐ์ ์
๋ ฅํ ๊ฒฝ์ฐ ์ฒ๋ฆฌ
print("์ ์๋ก ์
๋ ฅ")
print(e) # ๋ฐ์ํ ์๋ฌ ๋ฉ์์ง ์ถ๋ ฅ
except EOFError as e: # ์
๋ ฅ์ด ์ข
๋ฃ๋์์ ๋ ์ฒ๋ฆฌ
print("๊ฐ์ ์ข
๋ฃํ๋ค์")
print(e)
except Exception as e: # ์์ ๋ ์์ธ ์ธ์ ๋ค๋ฅธ ์์ธ๋ฅผ ์ฒ๋ฆฌ
print("๋ญ์ง ๋ชจ๋ฅผ ์๋ฌ ๋ฐ์")
print(e)
- try ๋ธ๋ก
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ int๋ก ๋ณํํ๋ ค๊ณ ์๋
- ๋ง์ฝ ์ฌ์ฉ์๊ฐ ๋ฌธ์๋ฅผ ์ ๋ ฅํ๋ฉด, ValueError๊ฐ ๋ฐ์ํ๊ณ , ์ด ์์ธ๋ except ValueError ๋ธ๋ก์์ ์ฒ๋ฆฌ ๋จ
- int(a)๊ฐ 0 ์ดํ์ ๊ฐ์ ์ ๋ ฅ๋ฐ์ผ๋ฉด, "์๋ชป ์ ๋ ฅํ์ จ์ต๋๋ค"๋ฅผ ์ถ๋ ฅ
- except ๋ธ๋ก
- except ValueError: ์ซ์๋ก ๋ณํ ๋ถ๊ฐํ ์ ๋ ฅ ๋ฐ์ ์ ์์ธ
- except EOFError: ์ฌ์ฉ์๊ฐ ์ ๋ ฅ์ ๊ฐ์ ๋ก ์ข ๋ฃ ํ์ ์ ์์ธ
- except Exception: ๋๋จธ์ง ๋ชจ๋ ์์ธ์ ๋ํ ์์ธ
์์ธ ์ฒ๋ฆฌ ์ฐ์ ์์
- ์์ธ๋ ์์ ์์ธ๋ถํฐ ์ฒ๋ฆฌํด์ผ ํ๋ค. ์์ธ ์ฒ๋ฆฌ ์ ํํฅ์์ผ๋ก ์คํ๋๊ธฐ์ ์ธ๋ถ์ ์ธ ์์ธ๊ฐ ์์ ์์ธ๋ณด๋ค ์์ ์์นํด ์์ด์ผ ํ๋ค.
- ex) Exception์ ๋จผ์ ์ฒ๋ฆฌํ๊ณ ValueError๊ฐ ์๋์ ์์ผ๋ฉด, ValueError๊ฐ ์ ์ฉ๋์ง ์๋๋ค.
๋ฌธ์ ๋ถ์
def convert(a):
return int(a[::-1])
try:
num = input('์ ์ ์
๋ ฅ: ')
print(convert(num))
except ValueError as e:
print("์ ์๋ก ์
๋ ฅ")
print(e)
except EOFError as e:
print("๊ฐ์ ์ข
๋ฃํ๋ค์")
print(e)
except Exception as e:
print("๋ญ์ง ๋ชจ๋ฅผ ์๋ฌ ๋ฐ์")
print(e)
์ด๋ -32๋ผ๋ ์์๋ฅผ ๋ฃ์ผ๋ฉด print("๋ญ์ง ๋ชจ๋ฅผ ์๋ฌ ๋ฐ์")๊ฐ ์ถ๋ ฅ๋๋ค.
์๋ฌธ์ด์๋ ๊ฑด num์์ฒด๋ฅผ convertํจ์์ ์ ์ฉํ๊ฑธ ๋ค๋ฅธ ๋ณ์์ ํ ๋น๋ฐ์ง ์์๋๋ฐ, ์ด์งธ์ num์ด convert์ ์ ์ฉ๋๋์ง์๋ค. ๋๋ ๋จ์ํ ํ๋ฆฐํธํ๊ฒ์ด๋ผ ์๊ฐํ๊ณ , ๊ฐ์ฌ๋๊ป ์ฌ์ญค๋ณด๋ printํ๊ธฐ์ ์ convert๊ฐ ๋จผ์ ์ ์ฉ๋๊ณ , ํ๋์ ํจ์๋ก ์ ์ฉ๋๊ธฐ์ num์ด ๋ค์งํ๊ฒ ๋๋ค.
์ฆ, ๋จ์ํ ํ๋ฆฐํธํ๋๊ฒ์ด ์๋๋ผ, convert(num) ํจ์ ํธ์ถ์ด ๋จผ์ ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
num์ convert() ํจ์์ ์ ์ฉํ ๊ฒฐ๊ณผ๋ num์ด ์๋ ํจ์์ ๋ฐํ๊ฐ์ด๋ฏ๋ก, num์ด ์ง์ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ์๋์ง, convert() ๋ด๋ถ์์ ๋ค์งํ๋ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ด๋ค.
EAFP & LBYL
๊ฐ๋ฐ์ ์
์ฅ์์๋
- AttributeError - debug: EAFP ๋ฐฉ์
- ValueError - ์ ํต์ LBYL ๋ฐฉ์
try, except๋ง์ผ๋ก ๋ชจ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ ์๋ ์๋ค. elif ๊ตฌ๋ฌธ์ฒ๋ผ ์์ธ๋ฅผ ์ฌ๋ฌ๊ฐ ์ฒ๋ฆฌํ ์๋ ์๋ค.
๋๊ฐ์ง ๋ฐฉ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค.
- EAFP (Easier to Ask for Forgiveness than Permission)
- AttributeError ๊ฐ์ ์์ธ๋ try-except๋ก ์ฒ๋ฆฌํ๋ฉฐ ๋จผ์ ์๋ํ๊ณ ์๋ฌ๊ฐ ๋๋ฉด ์ฒ๋ฆฌํ๋ค.
- LBYL (Look Before You Leap)
- ValueError ๊ฐ์ ์์ธ๋ if๋ก ํ์ธํ๊ณ ์ฒ๋ฆฌํ๋ค.
์ฅ๊ณ ์ ๊ฒฝ์ฐ ctrl+C ๋๋ฅด๋ฉด ๋ก์ปฌ ์๋ฒ๊ฐ ์ข ๋ฃ๋๋๋ฐ, ์ด ์์ธ๋ฅผ ์ด์ฉํ์ฌ ์ข ๋ฃ๋ฅผ ๋ง๋ค ์๋ ์๋ค.
raise๋ฅผ ์จ์ ์์ธ๋ฅผ ๊ฐ์ ๋ก ๋ฐ์์์ผ ํ๋ก๊ทธ๋จ ํ๋ฆ ์ ์ด ํ ์๋์๋ค.
while True:
try:
read = input("c:\> ")
print(read)
except EOFError:
print("์คํ ์ข
๋ฃ")
break
ํด๋์ค
ํด๋์ค, ๊ฐ์ฒด, ์ธ์คํด์ค์ ๊ด๊ณ
ํด๋์ค๋ ๊ฐ์ฒด ์์ฑ์ ์ํ ์ค๊ณ๋์ด๋ค. (์ธ์คํด์ค = ๊ฐ์ฒด = ์ค๋ธ์ ํธ)๋ ํด๋์ค๋ฅผ ํ ๋๋ก ์ค์ ๋ก ๋ง๋ค์ด์ง ๊ฒ
class Car:
# ์ด๊ธฐํ ๋ฉ์๋ (๊ฐ์ฒด ์์ฑ ์ ์๋์ผ๋ก ํธ์ถ)
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
# start ๋ฉ์๋ (๋์์ ์ ์)
def start(self):
print(f"{self.year} {self.make} {self.model} is start")
# Car ํด๋์ค์ ์ธ์คํด์ค
my_car = Car('Toyota', 'Corolla', 2020)
your_car = Car('Honda', 'Civic', 2021)
my_car.start() #์ถ๋ ฅ: 2020 Toyota Corolla is start
your_car.start() #์ถ๋ ฅ: 2021 Honda Civic is start
- ์์ฑ: ๊ฐ์ฒด์ ํน์ฑ์ ๋ํ๋ด๋ ๋ณ์
- ๋ฉ์๋: ํด๋์ค ๋ด์ ์ ์๋ ํจ์๋ก, ๊ฐ์ฒด์ ํ๋ ์ ์
ํด๋์ค ๋ณ์ vs ์ธ์คํด์ค ๋ณ์ & ํด๋์ค ๋ฉ์๋ vs ์ธ์คํด์ค ๋ฉ์๋
- ํด๋์ค ๋ณ์: ํด๋์ค ์์ฒด์ ์ํ ๋ณ์, ์ด ๋ณ์๋ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์ ํ๋ ๋ณ์
- ํด๋์ค ์ด๋ฆ์ผ๋ก ์ง์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ๋ชจ๋ ์ธ์คํด์ค์์ ๊ณตํต์ผ๋ก ์ฌ์ฉ
- ์ธ์คํด์ค ๋ณ์: ๊ฐ ์ธ์คํด์ค์ ์ํ ๋ณ์, ๊ฐ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋๋ง๋ค self๋ฅผ ํตํด ์ด๊ธฐํ๋ ๊ฐ์ ๊ฐ์ง
- ๊ฐ ์ธ์คํด์ค๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๊ณ , ํด๋์ค์๋ ๊ด๊ณ์์ด ๊ฐ๋ณ์ ์ผ๋ก ๊ด๋ฆฌ๋จ
- ํด๋์ค ๋ฉ์๋: ํด๋์ค ์์ฒด์ ์ ์ฉ๋๋ ํจ์, ์ธ์คํด์ค์ ๊ด๊ณ์์ด ํด๋์ค ์์ฒด์์ ๋์
- @classmethod ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์. ์์ผ๋ฉด ์ธ์คํด์ค ๋ฉ์๋๋ก ๊ฐ์ฃผ
- ์ธ์คํด์ค ๋ฉ์๋: ์ธ์คํด์ค์ ์ ์ฉ๋๋ ํจ์, ์ด ๋ฉ์๋๋ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก self๋ฅผ ๋ฐ์ผ๋ฉฐ, self๋ฅผ ํตํด ์ธ์คํด์ค ๋ณ์์ ์ ๊ทผํ๊ฑฐ๋ ๋ฉ์๋๋ฅผ ํธ์ถ
- ์ธ์คํด์ค ๋ฉ์๋๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ํด๋น ๊ฐ์ฒด์ ๋ํด ๋์
class Dog:
# ํด๋์ค ๋ณ์
total_dogs = 0
def __init__(self, name):
# ์ธ์คํด์ค ๋ณ์
self.name = name
Dog.total_dogs += 1 # ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค ํด๋์ค ๋ณ์๊ฐ ์ฆ๊ฐ
# ํด๋์ค ๋ฉ์๋
@classmethod
def get_total_dogs(cls):
print(f"Total number of dogs: {cls.total_dogs}")
# ์ธ์คํด์ค ๋ฉ์๋
def speak(self):
print(f"{self.name} says woof!")
# ์ธ์คํด์ค ์์ฑ
dog1 = Dog("Buddy")
dog2 = Dog("Bella")
# ์ธ์คํด์ค ๋ฉ์๋ ํธ์ถ
dog1.speak() # ์ถ๋ ฅ: Buddy says woof!
dog2.speak() # ์ถ๋ ฅ: Bella says woof!
# ํด๋์ค ๋ฉ์๋ ํธ์ถ
Dog.get_total_dogs() # ์ถ๋ ฅ: Total number of dogs: 2
Wednesday (01.08)
์ค๋์ ์ ์ฌ
๋ณ์ โญ๏ธโญ๏ธโญ๏ธโญ๏ธ
๋ง๋ ์๊ณ , ๊ฐ๊ฒฉ๋ ์ ๋ ดํ๋ค !!
๊ฐ์ฒด์งํฅ์ ํน์ฑ
- ์์, ๋คํ์ฑ, ์ถ์ํ ์บก์ํ
- ์์: ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋ฐํ์ผ๋ก ์๋ก์ด ํด๋์ค๋ฅผ ์ ์ํ๋ ๋ฐฉ์
- ๋ถ๋ชจ ํด๋์ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์๋ฐ์ ์์ ํ ์ ์์ด, ์ด๋ฅผ ํตํด ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค.
class Animal:
def speak(self):
print("Animal speaks")
class Dog(Animal):
def speak(self):
print("Dog barks")
dog = Dog()
dog.speak()
- ๋คํ์ฑ: ํ๋์ ์ด๋ฆ์ผ๋ก ์ฌ๋ฌ ํํ๊ฐ ๊ฐ๋ฅํ ๊ฒ, ๊ฐ์ ๋ฉ์๋๋ก ๋ค์ํ ๋ฐฉ์์ผ๋ก ๋์ํ ์ ์๋ค.
- ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ: ํ๋์ ๋ฉ์๋ ์ด๋ฆ์ผ๋ก ์ฌ๋ฌ ๋งค๊ฐ๋ณ์ ์ฒ๋ฆฌ
- ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ: ์์๋ฐ์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค ๋ฉ์๋ ์ฌ์ ์
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("Dog barks")
class Cat(Animal):
def speak(self):
print("Cat meows")
def make_sound(animal: Animal):
animal.speak()
dog = Dog()
cat = Cat()
make_sound(dog) # ์ถ๋ ฅ: Dog barks
make_sound(cat) # ์ถ๋ ฅ: Cat meows
- ์ถ์ํ: ๋ถํ์ํ ์ธ๋ถ ๋ด์ฉ์ ์ค์ด๊ณ , ์ค์ ๋ถ๋ถ๋ง ๋ ธ์ถํ๋ ๊ฒ
- ์ธ๋ถ ๊ตฌํ์ ์๋ธํด๋์ค, ์ธํฐํ์ด์ค์์ ์ ์
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("Dog barks")
dog = Dog()
dog.speak() # ์ถ๋ ฅ: Dog barks
- ์บก์ํ: ๊ฐ์ฒด์ ๋ณ์, ๋ฉ์๋๋ฅผ ํ๋๋ก ๋ฌถ๊ณ , ์ธ๋ถ์์ ์ ๊ทผ์ ์ ํํ๋ ๊ฒ์ผ๋ก, ์ด๋ฅผ ํตํด ์ ๋ณด์๋(๊ฐ์ฒด ์์ ๊ด๋ฆฌ)
- ์ ๊ทผ ์ ์ด์(private, protected, public)
class BankAccount:
def __init__(self, balance):
self.__balance = balance # __balance๋ private ๋ฉค๋ฒ
def deposit(self, amount):
if amount > 0:
self.__balance += amount
def get_balance(self):
return self.__balance
account = BankAccount(1000)
account.deposit(500)
print(account.get_balance()) # ์ถ๋ ฅ: 1500
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} makes a sound.")
class Dog(Animal): # Animal ํด๋์ค๋ฅผ ์์๋ฐ๋ Dog ํด๋์ค
def __init__(self, name, breed):
super().__init__(name) # ๋ถ๋ชจ ํด๋์ค์ธ Animal์ __init__ ํธ์ถ
self.breed = breed
def speak(self): # ๋ถ๋ชจ์ speak ๋ฉ์๋๋ฅผ ๋ฎ์ด์ (์ค๋ฒ๋ผ์ด๋ฉ)
print(f"{self.name} barks!")
def get_breed(self):
print(f"{self.name} is a {self.breed}.")
# Dog ํด๋์ค์ ์ธ์คํด์ค ์์ฑ
dog = Dog("Buddy", "Golden Retriever")
dog.speak() # ๋ถ๋ชจ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋๋ ๋ฉ์๋ ํธ์ถ
dog.get_breed() # ์์ ํด๋์ค์์ ์ถ๊ฐ๋ ๋ฉ์๋ ํธ์ถ
#๊ฒฐ๊ณผ
#Buddy barks!
#Buddy is a Golden Retriever.
super()๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ ํด๋์ค์ __init__() ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ , ์ถ๊ฐ์ ์ธ breed ์์ฑ ์ด๊ธฐํ
์ฆ, speak() ๋ฉ์๋๊ฐ ๋ถ๋ชจ ํด๋์ค ๋ด์ฉ ๋ฎ์ด์ฐ๊ณ , ์์ ํด๋์ค์์ ๊ตฌํํ ๋ด์ฉ์ ์คํํจ
๋ค์ค์์
class Animal:
def speak(self):
print("Animal makes a sound.")
class Flyable:
def fly(self):
print("Flying!")
class Bird(Animal, Flyable): # Animal๊ณผ Flyable ํด๋์ค๋ฅผ ๋ชจ๋ ์์๋ฐ์
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} chirps!")
bird = Bird("Sparrow")
bird.speak() # ๋ถ๋ชจ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋๋ ๋ฉ์๋ ํธ์ถ
bird.fly() # Flyable ํด๋์ค์์ ์์๋ ๋ฉ์๋ ํธ์ถ
ํ์ด์ฌ์ ๋ค๋ฅธ ์ธ์ด์ ๋ฌ๋ฆฌ ๋ค์ค์์์ด ํ์ฉ๋๋, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ๋ค์ค์์์ ์ง์ํด์ผํ๋ค.
๋ฐ๋ผ์ ํผํ ์ ์๋ค๋ฉด ๋ค์ค์์์ ์ฌ์ฉํ์ง ์๋๋กํ์
class BankAccount:
# ํด๋์ค ๋ณ์
customer_total=0
def __init__(self, __account, __name, __balance, __password):
# ์ธ์คํด์ค ๋ณ์
self.__account = __account
self.__name = __name
self.__balance = __balance
self.__password = __password
BankAccount.customer_total+=1
# ํด๋์ค ๋ฉ์๋
@classmethod
def customer_total_check(cls):
print(f"ํ์ฌ๊น์ง ์์ฑ๋ ๊ณ์ข ์๋ {cls.customer_total} ")
#๊ธ์ก์ ์
๊ธํ๋ ๋ฉ์๋(put_balance)
def put_balance(self,balance):
self.__balance += balance
print(f'์ฌ์ฉ์๊ฐ ์
๊ธํ ๊ธ์ก์ {balance} ์
๋๋ค.')
print("์
๊ธ์๋ฃ")
return self.__balance
#๊ธ์ก ์ถ๊ธํ๋ ๋ฉ์๋(out_balance)
def out_balance(self,balance):
if self.__balance<balance:
print("๋์ด ๋ถ์กฑํ์ฌ ์ถ๊ธ๋ถ๊ฐ")
else:
self.__balance -= balance
print(f'์ฌ์ฉ์๊ฐ ์ถ๊ธํ ๊ธ์ก์ {balance} ์
๋๋ค.')
print("์ถ๊ธ์๋ฃ")
return self.__balance
#๊ธ์ก ์กฐํ(get_balance)
def get_balance(self):
print(f"ํ์ฌ๊ธ์ก: {self.__balance}")
print("๊ธ์ก ์กฐํ์๋ฃ")
#๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ(set_pw)
def set_pw(self,__password):
self.__password = __password
print("๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์๋ฃ")
#๋น๋ฐ๋ฒํธ ์กฐํ(get_pw)
def get_pw(self):
print(f"ํ์ฌ ๋น๋ฐ๋ฒํธ: {self.__password}")
print("๋น๋ฐ๋ฒํธ ์กฐํ์๋ฃ")
# ์ธ์คํด์ค ์์ฑ
customer1 = BankAccount("1209","Kim",10000,"qwer")
customer2 = BankAccount("3487","Lee",20000,"asdf")
customer3 = BankAccount("5665","Park",30000,"zxcv")
customer4 = BankAccount("7843","Lim",40000,"uiop")
# ์ธ์คํด์ค ๋ฉ์๋ ํธ์ถ
customer1.get_balance()
customer1.get_pw()
customer1.put_balance(10000)
customer1.get_balance()
customer1.out_balance(10000)
customer1.get_balance()
customer1.set_pw("QWER")
customer1.get_pw()
BankAccount.customer_total_check()
์ ๊ธ๊ณผ ์ถ๊ธ๊ณผ ๊ฐ์ด ๋ ๊ฐ์ง ์ด์์ ๋์์ ์ฒ๋ฆฌํด์ผ ํ ๊ฒฝ์ฐ, ์ธํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ๋ ๋์ , ๋ฉ์๋๋ก ๊ฐ๊ฐ ์ ๊ธ๊ณผ ์ถ๊ธ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
@property ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ getter๋ฅผ ํํํ๊ณ , ์ธํฐ์ ๊ฒฝ์ฐ @get_pw.setter ์ ๊ฐ์ด ํํํ์ฌ ์ธํฐ๋ฅผ ํํํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์์ฑ์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ณ , ๋ฉ์๋ ํธ์ถ์ฒ๋ผ ๋ณด์ด์ง ์์ ์ง๊ด์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅ
๋งน๊ธ๋ง
์ด๋ฆ ๋ณ๊ฒฝ์ ๊ฐ๋ฆฌํค๋ ์ฉ์ด๋ก ์ธ์คํด์ค ๋ณ์ ์์ ๋๋ธ ์ธ๋์ค์ฝ์ด(__)๋ฅผ ๋ถ์ฌ ํํํ๋ค.
๋งน๊ธ๋ง์ ์ฌ์ฉํ๋ฉด ํด๋์ค ๋ด๋ถ์์๋ง ์ฌ์ฉํ ์ ์๋๋ก ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ค.
'__my_private_variable'๊ณผ '__my_private_method'๋ '_MyClass__my_private_variable'๊ณผ '_MyClass__my_private_method'๋ก ๋ฐ๋๋ค.
ํ์ด์ฌ์ ๋ณ์๋ ๋ฉ์๋๋ฅผ ๋น๊ณต๊ฐ๋ก ๋ง๋ค์ด๋, ์ฌ์ ํ ์ธ๋ถ์์ ์ ๊ทผ์ด ๋๋๋ฐ, ์ด๋ฅผ ์จ๊ธฐ๊ธฐ ์ํด ๋งน๊ธ๋ง์ ์ฌ์ฉํ๋ค.
class MyClass:
def __init__(self):
self.__my_private_variable = 42
def __my_private_method(self):
print("This is a private method.")
1. ์์ฑ๊ฐ์ ์ธ๋ถ์์ ์ ๊ทผํ๊ธฐ ์ด๋ ต๊ฒ ํ ๋(like Private)
__secret์ ์ค์ ๋ก_MyClass__secret์ผ๋ก ๋ณ๊ฒฝ๋๋ฉฐ, ์ธ๋ถ์์ obj.__secret์ผ๋ก ์ ๊ทผํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์์ฑ ์๋์ด ๊ฐ๋ฅํ๋ค.
class MyClass:
def __init__(self):
self.__secret = "์ด๊ฑด ๋น๋ฐ์ด์์!"
def reveal_secret(self):
return self.__secret
# ๊ฐ์ฒด ์์ฑ
obj = MyClass()
# ์ธ๋ถ์์ __secret์ ์ง์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์
try:
print(obj.__secret) # AttributeError: 'MyClass' object has no attribute '__secret'
except AttributeError as e:
print(e)
# ๋ด๋ถ ๋ฉ์๋๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅ
print(obj.reveal_secret()) # "์ด๊ฑด ๋น๋ฐ์ด์์!"
2. ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ์์ฑ/๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ง์ ๋
๋งน๊ธ๋ง์ ์ฌ์ฉํ๋ฉด, ํ์ ํด๋์ค์์ ์์ ํด๋์ค์ ์์ฑ์ ์ค๋ฒ๋ผ์ด๋ฉํ๋ ๊ฒ์ ๋ง๋๋ค.
class Parent:
def __init__(self):
self.__data = "๋ถ๋ชจ์ ๋น๋ฐ"
def show_data(self):
return self.__data
class Child(Parent):
def __init__(self):
super().__init__()
self.__data = "์์์ ๋น๋ฐ" # ๋ถ๋ชจ ํด๋์ค์ __data๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๋ ค๊ณ ์๋
def show_data(self):
return self.__data # ๋ถ๋ชจ ํด๋์ค์ __data๋ฅผ ์ฌ์ฉํ๋ ค๋ ์๋
# ๊ฐ์ฒด ์์ฑ
child = Child()
# ๋ถ๋ชจ ํด๋์ค์ __data๋ ์ค๋ฒ๋ผ์ด๋ฉ๋์ง ์์
try:
print(child.show_data()) # AttributeError ๋ฐ์: 'Child' object has no attribute '_Parent__data'
except AttributeError as e:
print(e)
# ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋ ํธ์ถ
parent = Parent()
print(parent.show_data()) # "๋ถ๋ชจ์ ๋น๋ฐ"
Parent ํด๋์ค์ __data ์์ฑ์ _Parent__data๋ก ์ด๋ฆ์ด ๋ณ๊ฒฝ๋๊ณ , Child์์ ์ค๋ฒ๋ผ์ด๋ฉ์ ์๋ํ์ง๋ง, ์๋๋ค.
child.show_data() ํธ์ถ ์, ๋ถ๋ชจ ํด๋์ค์์์ __data์ ์ ๊ทผํ๋ ค๊ณ ์๋ํ์ง๋ง, ์ด๋ฏธ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์ด ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ถ๊ฐ๋ฅํด์ง๋ค.
Thursday (01.09)
์ค๋์ ์ ์ฌ
๋ณ์ โญ๏ธโญ๏ธโญ๏ธโญ๏ธ
๋ ์ด ์ฐจ์ ์ฌ๋๋ค์ด ๊ฑด๋ฌผ์์ ์์ฌ๋ฅผ ํ๋ ๋ฏ ํ๋ค. ๊ทธ๋์ 20๋ถ ๊ธฐ๋ค๋ ธ๋ค ใ ใ
๋ฐฐ๊ฐ ๋๋ฌด ๊ณ ํ์ ๊ธํ๊ฒ ๋จน๋๋ผ, ์ฌ์ง๋ ๋ชป ์ฐ์๋ค.
์ง๊ธ์ด๋ ํ๋ฒํ๊ณ , ๋๋ฃจ์น๊ธฐ๊ฐ ๋ถ๋ง์ด ๋์ ๋ง์์๋ค. ์ฌ๊ธฐ๋ ๋๋ฃจ์น๊ธฐ ๋ง์ง์ด๋ค.
https://koreatstm.tistory.com/222
Friday (01.10)
https://koreatstm.tistory.com/223
'๐ฐ์ฐ๋ฆฌ FISA > ํ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐ๋ฆฌ FISA AI์์ง๋์ด๋ง 1์ฃผ์ฐจ ๊ณผ์ (0) | 2024.12.30 |
---|