#[Step 01: ํด๋์ค ์ ์ธ ]
class Test: # object์ ํ์ ํด๋์ค๊ฐ ๋์ด ์ ์กฐ์ ๋ฉ์๋๋ค์ ์ฐธ์กฐํ๊ณ ์๋ค. object <- Test
# class UserName :
# 1.class์์ ๋ชจ๋ ๋ฉ์๋์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ์ธ์๋ self๊ฐ ์ง์ ๋์ด์๋ค.
# 2.๋ชจ๋ ๋ฉ์๋์ self๋ก ๋ณ์ ๋๋ ๋ฉ์๋๋ฅผ ํธ์ถํด์ ๊ตฌํํ ์ ์๋ค.
def empty(self):
self.data = []
def add(self, x):
self.data.append(x)
if __name__ == '__main__':
#[Step 02: ํด๋์ค ๊ฐ์ฒด ์์ฑ ]
my01 = Test() # ๊ฐ์ฒด ์์ฑ
my02 = Test()
print(my01) # ์ฃผ์ ์ถ๋ ฅ
print(my02)
my01.empty() #๋ฉ์๋ ํธ์ถ
my01.add(10)
print(my01.data) # ๊ฐ ๋์
๋ฐ์ ๋ณ์ ํ์ธ
my03 = my01 #my01 ์ฃผ์ ๋ณต์ฌ
print(my03.data) # my01๊ณผ ๊ฐ์ data ์ถ๋ ฅ
print(my03) # my01์ ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์ ์ฃผ์๊ฐ ๋์ผ
# [Step03 : ๋ฉค๋ฒ ํธ์ถ]
my01.empty()
my02.empty()
for i in range(1,6):
my01.add(i)
print(my01.data)
print(my02.data) # my02์๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฏ๋ก ๋น์ด์๋ค. = []
print(my01, my02) # ์ฃผ์ ์ถ๋ ฅ
๐ก
class ์์ ๋ชจ๋ ๋ฉ์๋์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ์ธ์๋self
์ง์
๊ฐ์ฒด์์ฑ์ java์ new ์์ฑ์์ ๊ฐ๋ค.
#์ด๋ฆ , ์ฃผ์ , ์ ํ ๋ฒํธ๋ฅผ ๊ด๋ฆฌํ๋ Address ๋ผ๋ ํด๋์ค๋ฅผ ์ ์ธํด์ ๋ณ์๋ก ๊ฐ์ ์ ์ฅํด ๋ณด์
# ์ ์ ๋ณ์ static ๋ณ์ ํด๋์ค.๋ฉค๋ฒ๋ณ์
class Address:
name="Dominica"
addr = "seoul"
tel ="02-0000-000"
def prn(self): # ๋ฉค๋ฒ ๋ฉ์๋
print(Address.name, Address.addr, Address.tel) #์ ์ ํธ์ถ
if __name__ == '__main__':
print(Address.name, Address.addr, Address.tel)
#Dominica seoul 02-0000-000
Address.name ="1111111111111" #Addressํด๋์ค์ name์ ๋ณ๊ฒฝ
print(Address.name, Address.addr, Address.tel) # 111๋ก ๋ณ๊ฒฝ๋ ํ ์ถ๋ ฅ
#1111111111111 seoul 02-0000-000
a1 = Address() #์ฃผ์๋ณต์ฌ
a1.prn() # ๋ฉ์๋์ถ๋ ฅ
#1111111111111 seoul 02-0000-000
Address.name == ์ ์ ํธ์ถ (ํด๋์ค ๋ณ์๋ฅผ ์ง์ ํธ์ถํ๋ค.)
a1= Address() == ๊ฐ์ฒด์์ฑ(์ฃผ์๋ณต์ฌ)
#__class__ : ์ธ์คํด์ค๊ฐ ์์ ์ ์์ฑํ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํ์ฌ ํ์ด์ ์์ ์ ๊ณตํ๋ ํค์๋๋ก ํด๋์ค์์ญ(heap)์
# ๋ชจ๋ ์ธ์คํด์ค ๊ฐ์ฒด์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๊ฑฐ๋ ์์ ํ ๋ ์ฌ์ฉํ๋ค.
'''
์ฌ์ ๋ฒํธ 7์ ์์
์ค์
a111 850
b111 750
c111 650
Emp ๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ๋ณ์๋ฅผ 2๊ฐ ์ ์ธํ ํ a1,b1,c1์ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค์ ๊ฐ์ ์ ๋ฌ ํ ์ถ๋ ฅ ํด ๋ณด์.
'''
class Emp:
empno =0
result=0
if __name__ == '__main__':
a1=Emp()
a1.empno ='a111'
a1.result =850
print(a1.empno, a1.result)
# a111 500
b1=Emp()
b1.empno ='b111'
b1.result = 750
print(b1.empno , b1.result)
# b111 700
c1=Emp()
c1.empno='c111'
c1.result= 650
print(c1.empno, c1.result)
# c111 600
#์ ์ ํธ์ถ
print(Emp.empno, Emp.result)
# 0 0 ์ถ๋ ฅ
# Empํด๋์ค์ ๋ณ์๋ค์ ๊ฐ์ 0 ์ด๊ธฐ ๋๋ฌธ
#ํด๋์ค ๋ช
๋ช
, ๊ฐ์ฒด์ ํ์
์ ์ธ๋ถ์์ ์ฐธ์กฐ
print(Emp.__name__, type(a1.__class__) , b1.__class__ , c1.__class__)
# Emp <class 'type'> <class '__main__.Emp'> <class '__main__.Emp'>
# ์บก์ํ : ์๋๋ ๋ฉค๋ฒ ๋ณ์์ ์คํ๋ ๋ฉ์๋๋ก ๊ฐ์ ์ ๋ฌ(setXX) ๋ฐ ๋ณ๊ฒฝํ๋ ๊ตฌ์กฐ(getXX return)
# getter & setter
class Test:
__b=100 #๊ฐ์ฒด ์์ฑ ํ ํธ์ถํ ์ ์๊ณ , Test์ ๋ฉค๋ฒ๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ค. #__ = ๊ฐํ(strong) private
def __m(self): #ํ๋ฌธ์๋ฅผ ๋ฆฌํดํ๋ private ๋ฉ์๋
return 'a'
def k(self):
print(self.__m(), self.__b)
if __name__ == '__main__':
my = Test()
my.k()
#print(my.__b)์ค๋ฅ ,,!!Test.__b X
__x
=๊ฐํ private
๊ฐ์ฒด ์์ฑ ํ ํธ์ถํ ์ ์๋ค.
# ์ ์ํ ๋ณ์ a,b ๋ฅผ ๊ด๋ฆฌํ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋ณด์. ๋จ ์บก์ํ๋ก ๊ตฌํ ํด๋ณด์.
# ์๋๋ ๋ฉค๋ฒ ๋ณ์์๊ฒ setxx์ผ๋ก ๊ฐ ์ ๋ฌ ๋ฐ ๋ณ๊ฒฝํ๊ณ getxx return ๋ฉ์๋๋ก ๋ฆฌํดํ๋ ๊ตฌ์กฐ
class Test:
__a=0 #์ฃผ์ ํ๋ private ์ด๊ธฐ๊ฐ์ ์์ฑ์์์ ๋์
__b=0
#name ="abc" def setName():~~
def setA(self, a):
self.__a =a # ๊ฐ์ฒด ์์ฑํ ๊ฐ์ a ๋ก ์ ๋ฌ๋ฐ์ ๋ฉค๋ฒ__a ์๊ฒ ๊ฐ์ ๋ฌ ๋ฐ ๋ณ๊ฒฝ
def getA(self):
return self.__a
def setB(self,b):
self.__b=b
def getB(self):
return self.__b
def gethap(self):
return (self.__a+self.__b)
def gethsub(self):
return (self.__a - self.__b)
if __name__ == '__main__':
t1 = Test()
t1.setA(100)
print(t1.getA())
t1.setB(200)
print(t1.getB())
print('hap=',t1.gethap())
t1.setA(300) # a๊ฐ ๋ณ๊ฒฝ
print('sub=',t1.gethsub())
#์์ฑ์์ ์๋ฉธ์๋ฅผ ์ดํด๋ณด์.
# ์์ฑ์๋ฅผ ๋ช
์ํ์ง ์์ผ๋ฉด ์๋์ผ๋ก ๋ด๋ถํธ์ถ๋์ด ์์ฑ๋๊ณ ๋ช
์ํ๊ฒ ๋๋ฉด ๋ช
์๋ ์์ฑ์๊ฐ ํธ์ถ๋๋ค.
# ์์ฑ์๋ ๋จํ๋ฒ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์๋ ํธ์ถ๋๋ฉฐ ํด๋นํด๋์ค์ ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ๋์ ํ ๋น ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ํ๊ฒ ๋๋ค.
# ์์ฑ์์ ๋ชฉ์ ์ ๋ฉค๋ฒ๋ณ์ ์ด๊ธฐํ์ ์๋ค.
class MyDel:
#์์ฑ์๊ฐ 2๊ฐ์ผ ๊ฒฝ์ฐ 2๋ฒ์งธ ์์ฑ์๊ฐ ์ถ๋ ฅ๋๋ค. (๋ฎ์ด์ฐ๊ธฐ)
def __init__(self, a=100): #์์ฑ์
self.a=a
print("__ init__",a)
# def __init__(self):
# print("__ init__")
def __del__(self): #์๋ฉธ์ ๊ฐ์ฒด๊ฐ ์๋ฉธ๋๋ ์์ ์์ ํธ์ถ ๋๋ฉด์ ๋ฆฌ์์ค ํด์
print("๋ ์๊ฑฐ๋๋ค. ํ์ฌ ํด๋์ค์์ ํธ์ถ๋๊ฑฐ๋ ์ฐธ์กฐํ ๋ค๋ฅธํด๋์ค๋ฅผ ๋ฉค๋ฒ๋ก ๊ฐ์ง๋ ์๊ฑฐํ๋ค. ")
if __name__ == '__main__':
# 1. ๊ธฐ๋ณธ ๊ฐ์ฒด๋ฅผ ์์ฑํ์
m1 = MyDel()
# a1 = MyDel(200) #MyDel์ด๋ผ๋ ํด๋์ค๋ฅผ ์์ฑ์๋ฅผ ํธ์ถํ๋ฉด์ ๊ฐ์ฒด ์์ฑํ๋ค.
# print(a1.a)
# MyDel.a=10000 #
# print(MyDel.a, a1.a)
๊ฐ์ ์์ฑ์๊ฐ ์ฌ๋ฌ๊ฐ ์์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์๋์ ์๋ ์์ฑ์๊ฐ ์ถ๋ ฅ
์๋ฉธ์๋ ๊ฐ์ฒด๊ฐ ์๋ฉธ๋๋ ์์ ์ ํธ์ถ๋๋ค.
#๊ฐ๋จํ ๊ตฌ์กฐ์ ์์์ ๊ตฌํํด ๋ณด์.
# ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ๊ด๋ฆฌํ๋ Person ํด๋์ค์๋ค.
# Studentํด๋์ค Person์ ์์์ ๋ฐ์ ํ๋
๋ง ์ถ๊ฐํด์ ์ด๋ฆ, ๋์ด, ํ๋
์ ๋ชจ๋ ์ถ๋ ฅํ๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค.
# this, super = self, super | java => super(name,age,b) | python => super().__init__(name,age,b)
'''
1. ์์ ๊ตฌ์กฐ : ํ์ํด๋์ค (์ ์กฐํด๋์ค):
2. ํ์ ํด๋์ค์์ ์ ์กฐ์ ๋ฉค๋ฒ๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ ๋ฐ ์์ ๋ฐ๋ ๋ฉค๋ฒ
3. ์์ฑ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ
#1. return self.personInfo() + ",grade :"+ str(self.grade) #self.์ ์กฐ์ ๋ฉค๋ฒ
#2. return super().personInfo()+ ",grade :"+ str(self.grade) # super().์ ์กฐ์ ๋ฉค๋ฒ
#3. return Person.personInfo(self)+ ",grade :"+ str(self.grade) #์ ์กฐ์ class๋ช
.์ ์กฐ์ ๋ฉค๋ฒ(self)
'''
class Person:
__b = 10 #๊ฐํ private ํ์์ ๋ฉค๋ฒ๋ง ํธ์ถ์ด ๊ฐ๋ฅํ๋ค ํ์์ ํธ์ถ์ด ๋ถ๊ฐ๋ฅํ๋ค.
def __init__(self, name, age,b): #5. ์ ์กฐ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด์ ๋ฉค๋ฒ๋ณ์์๊ฒ ๊ฐ์ ๋ฌ
self.name = name
self.age = age
self.__b=b
def personInfo(self): #๋ฉค๋ฒ๋ณ์ ์ถ๋ ฅ์ฉ ๋ฉ์๋ + ์ฐ๊ฒฐ์ฐ์ฐ์๋ ์ํ์ค์ ๊ฐ์ ๊ฐ์ฒด๋ผ๋ฆฌ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๋ค. str+str
return self.name +": (age :" + str(self.age) +")"
class Student(Person): #2
def __init__(self,name, age,b, grade):#3
# Person.__init__(self,name,age) #4 ์ ์กฐ์ ์์ฑ์
super().__init__(name,age,b) # self๊ฐ ํ์์์?
self.grade = grade #6. ๊ฐ์ฒด ์์ฑ ํ๋ฉด์ grade๋ณ์ ๊ฐ์ ๋ฌ
def GetStudent(self):
# print("b= " , self.__b) #์ ์กฐ์ ๋ฉค๋ฒ์ private์ ์์๋ฐ์ง ๋ชปํ๋ค.
# 1. return self.personInfo() + ",grade :"+ str(self.grade)
# 2. return super().personInfo()+ ",grade :"+ str(self.grade) #self์๋์ผ
return Person.personInfo(self)+ ",grade :"+ str(self.grade) #์ ์กฐ์ class๋ช
+ self
if __name__ == '__main__':
x=Student("Ruri",7,3,5) #1.Student("Ruri",7,3) 7.์์ฑ๋ ์ ์กฐ์ ์ฃผ์๋ฅผ ๋ฆฌํด
print(x.GetStudent())
์์ฑ์ ํธ์ถ ๋ฐฉ๋ฒ๊ณผ ๋ฉ์๋ ํธ์ถ ๋ฐฉ๋ฒ
- return self.๋ฉ์๋์ด๋ฆ
- return super().๋ฉ์๋์ด๋ฆ
- return ํด๋์ค.๋ฉ์๋์ด๋ฆ(self)
#super() : ์ ์กฐ ํด๋์ค๋ฅผ ์๋ฏธํ๋ค. ๋ช
์์ ์ผ๋ก ํ์ ํด๋์ค์์ ์ ์กฐ์ ๋ณ์๋ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ ๋ ์ฌ์ฉํ๋ค.
#ํ์ํด๋์ค์์ ํ์์ด ๊ฐ์ง ๊ฐ์ ์ ์กฐ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํด์ ๋์
ํ๋ ค๋ฉด super()ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
class AA:
def __init__(self):
print("๋ AA ์์ฑ์ ")
class BB(AA):
def __init__(self):
super().__init__() #์ ์กฐ์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ํธ์ถ
#AA.__init__(self)
print("๋ BB ์์ฑ์ ")
if __name__ == '__main__':
#a1 = AA() #์์ฑ์๋ฅผ ํธ์ถํ๋ฉด์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด ์์ ์์ญ๊ณต๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๋๋ค.
b1=BB() # AA() <- BB() ์ ์กฐ๊ฐ ์์ฑ ๋ํ ํ์์ด ์์ฑ
ํ์ ํด๋์ค์์ ์ ์กฐ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถ(๋์ ) ํ๋ ค๋ฉด
super()
ํค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
class MyScore:
def __init__(self,kor,eng):
self.kor =kor
self.eng= eng
def getTot(self):
print("์ ์กฐ")
return(self.kor + self.eng)
class MyScore_Sub(MyScore):
def __init__(self, kor,eng,mat):
# super().__init__(kor,eng)
MyScore.__init__(self,kor,eng) #__init__๋ฉ์๋ ๋์ผํ๊ฒ ๋ฃ์ด์ค๋ค
self.mat=mat
def getTot(self):
print("ํ์ ๋ฉ์๋")
# return (super().getTot()+ self.mat) #ํ์์ด ์ ์กฐ์ ๋์ผํ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒ
return MyScore.getTot(self)+ self.mat
if __name__ == '__main__':
#print(MyScore(20,30).getTot())
print(MyScore_Sub(100,100,100).getTot()) #์์์์ ์ฌ์ ์๋ ํ์์ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
a1 = MyScore(10,20) #๊ฐ์ฒด ์์ฑ
print(a1.getTot())
from abc import abstractmethod, ABCMeta
class Base(metaclass=ABCMeta):
@abstractmethod
def start(self):
print("base start")
@abstractmethod
def Stop(self):
print("base stop")
class Cat(Base):
def start(self):
print("cat start")
def Stop(self):
print("cat stop")
class Duck(Base):
def start(self):
print("duck start")
def Stop(self):
print("duck stop")
class Puppy(Base):
def start(self):
print("puppy start")
def Stop(self):
print("puppy stop")
def MY_Call(m):
print(m.__class__)
m.start()
m.Stop()
if __name__ == '__main__':
MY_Call(Puppy())
MY_Call(Cat())
MY_Call(Duck())
@abstractmethod๋ฅผ ๊ฑธ๊ณ java์ ์ถ์๋ฉ์๋ ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
#ํ๋ ์ด์์ ์ ์กฐ๋ฅผ ๊ฐ์ง ๋ค์ค์์์ ๋ฐ์ ํด๋์ค๊ฐ ์ ์กฐ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ
#์ ์กฐ์ ์์ฑ์์๊ฒ ๊ฐ ์ ๋ฌ ํ๋ ๊ฒ
class Dog:
def sound(self):
print ("bark" )
def AA(self):
print("Dog'AA ")
class Cat:
def sound(self):
print ("meow")
def BB(self):
print("Cat's BB ")
#๋ค์ค ์์์ ๊ฒฝ์ฐ class๋ช
์ผ๋ก ๋ช
์ํ์ฌ ํธ์ถํ์. 1. O ,2.X
class Chimera(Dog,Cat):
def sound(self):
#1 ์ด๋ค ํด๋์ค์ ๋ฉ์๋์ธ์ง ์์์๋ค
Cat.sound(self)
Dog.sound(self)
#2 ์ด๋ค ํด๋์ค์ ๋ฉ์๋์ธ์ง ๋ชจ๋ฆ
super().sound()
super().AA()
print("Chimera")
if __name__ == '__main__':
Chimera().sound() # a1 = Chimera() ; a1.sound()
๋ค์ค์์์ ๊ฒฝ์ฐ class๋ช ์ผ๋ก ๋ช ์ํ์ฌ ํธ์ถํ๋๊ฒ์ด ์ข๋ค.
es) Cat.sound(self)
# @property : ๋ฉ์๋๋ฅผ ๋ณ์๋ก ํธ์ถํ ์ ์๋๋ก ์ง์
class My:
def __init__(self):
self.x=0
@property #@mFun.getter์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค. ๊ฐ์ ๋ฐ๋ ๋ณ์๋ก ๋ณํ
def mFun(self): # ๋ฉค๋ฒ ๋ณ์ x๋ฅผ ๋ฆฌํดํ๋ UserMethod / print(a.mFun)
return self.x
@mFun.setter
def mFun(self, x): #๋ฉค๋ฒ ๋ณ์ x์๊ฒ ์ง์ญ๋ณ์ x๊ฐ ๊ฐ์ ๋ฐ์ ์ ๋ฌ ๋ฐ ๋ณ๊ฒฝํ๋ UserMethod
self.x = x
if __name__ == '__main__':
a = My()
a.mFun = 100
print(a.mFun)
@property == (getter)
@๋ฉ์๋์ด๋ฆ.setter