티스토리 뷰
1. Class 생성자
▶ class 생성시 반드시 설정되어야 할 데이터나, 초기값이 필요한 경우 사용
▶ 내부변수등의 기본값을 지정하기 위하여 사용
▶ class 의 인스턴스 생성시 자동으로 동작
>>> class MyClass:
def __init__(self):
print("클레스가 생성되었습니다")
>>> myC = MyClass()
클레스가 생성되었습니다
▷__init__사용이유
>>> babo = Service()
>>> babo.sum(1, 1) --오류남
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 7, in sum
AttributeError: ’Service’ object has no attribute ’name'
--> babo.setname("바보") 와같은 이름을 넣어주는 과정이 빠졌기 때문에 오류가 남
>>> class Service:
secret = "영구는 배꼽이 두 개다"
def __init__(self, name):
self.name = name
def sum(self, a, b):
result = a + b
print("%s님 %s + %s = %s입니다." % (self.name, a, b, result))
--> 위의 setname=__init__ 로 변경됨
▶ex) pey=Servic()
→ __init-- 함수 이용시
pey=Service("이름입력")
----------예시---
>>> pey = Service()
>>> pey.setname("홍길동")
>>> pey.sum(1, 1)
※__init__함수사용시 간단해짐
>>> pey = Service("홍길동")
>>> pey.sum(1, 1)
----실습
class Cat:
def set_Info(self, name, eye_color, color):
self.name = name
self.eye_color = eye_color
self.color = color
myCat = Cat()
myCat.set_info("Cat","Black","White")
print("MyCat : ", myCat.name, " Eye:", myCat.eye_color, " Color:", myCat.color)
== RESTART: C:/Users/해니/AppData/Local/Programs/Python/Python36/3.27 exam.py ==
MyCat : Cat Eye: Black Color: White
>>>
※__init__사용
class Cat:
def __init__(self):
self.name = "Cat"
self.eye_color = "Black"
self.color = "White"
def set_Info(self, name, eye_color, color):
self.name = name
self.eye_color = eye_color
self.color = color
myCat = Cat()
myCat.set_info("Cat","Black","White") 삭제
print("MyCat : ", myCat.name, " Eye:", myCat.eye_color, " Color:", myCat.color)
== RESTART: C:/Users/해니/AppData/Local/Programs/Python/Python36/3.27 exam.py ==
MyCat : Cat Eye: Black Color: White
>>>
------
class cat :
def __init__(self):
self.name=Cat"
self.eye_color="Black"
self.color="White"
def set_info(self,name,eye_color,color) :
self.name=name
self.eye_color=eye_color
self.color=color
myCat=Cat()myCat.set_info("jme","B","B")
print("name:", myCat.name, "eye:", myCat.eye_color,"color:",myCat.color)
myCat.set_info("jim","Brown","Black")
print("name:",myCat.name,"eye:",myCat.eye_color,"color:",myCat.color)
== RESTART: C:/Users/해니/AppData/Local/Programs/Python/Python36/3.27 exam.py ==
MyCat : Cat Eye: Black Color: White
name: jim eye: Brown color: Black
--->각각의 값 출력가능
※__init__는 정해진 이름이므로 바꿀수없다
class Cat:
def __init__(self,name):
self.name="방울이"
self.eye_color="Black"
self.color="White"
def set_info(self,name, eye_color,color):
self.name=name
self.eye_color=eye_color
self.color=color
myCat=Cat("야옹이") -- 출력되지않음
#myCat.set_info("Cat","Black","White")
print("MyCat : ", myCat.name, " Eye:", myCat.eye_color, " Color:", myCat.color)
== RESTART: C:/Users/해니/AppData/Local/Programs/Python/Python36/3.27 exam.py ==
MyCat : 방울이 Eye: Black Color: White
>>>
2. class 의 생성자 초기값
▶ class의 생성자에서는 인자를 추가 가능
----인자 추가 실습
class Cat:
def __init__(self,name):
self.name=name
self.eye_color="Black"
self.color="White"
def set_info(self,name, eye_color,color):
self.name=name
self.eye_color=eye_color
self.color=color
myCat=Cat("야옹이")
print("MyCat : ", myCat.name, " Eye:", myCat.eye_color, " Color:", myCat.color)
== RESTART: C:/Users/해니/AppData/Local/Programs/Python/Python36/3.27 exam.py ==
MyCat : 야옹이 Eye: Black Color: White
---실습
class Housepark :
lastname = "박"
def __init__(self,name) :
self.fullname = self.lastname+name
def travel(self,where):
print("%s ,%s으로 가다"%(self.fullname,where))
pay=Housepark("이름")
pay.travel("여행")
== RESTART: C:/Users/해니/AppData/Local/Programs/Python/Python36/3.27 exam.py ==
박이름 ,여행으로 가다
>>>
--3개의 인자일 때
class cat :
def __init__(self,name,eye_color,color):
self.name=name
self.eye_color=eye_color
self.color=color
myCat=cat("Mycat","Brown","Black")
print("name:",myCat.name,"eye:",myCat.eye_color,"color:",myCat.color)
RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python36/trse.py
name: Mycat eye: Brown color: Black
3. class의 소멸자
▶ Class 의 사용이 끝난 후 인스턴스가 삭제될 경우 자동 적으로 호출
▶ 내부에서 사용한 변수 등의 메모리 정리를 위해 호출
class Students:
num_student = 0
def __init__(self, name):
Students.num_student += 1
self.name = name
def __del__(self):
Students.num_student -=1
-----소멸자 실습
class Students:
num_student = 0
def __init__(self, name):
Students.num_student += 1
self.name = name
def __del__(self):
Students.num_student -=1
def num_of_students(self):
return Students.num_student
a = Students("Cho")
b = Students("Park")
print("Number of Students:", b.num_of_students())
del a --a를 소멸
print("Number of Students:", b.num_of_students()
== RESTART: C:/Users/해니/AppData/Local/Programs/Python/Python36/3.27 exam.py ==
Number of students: 2
Number of students: 1 --a를 소멸한 후의 학생수
>>>
----실습 2
class Cat:
num_cat=0
def __init__(self,name,eye_color,color):
self.name=name
self.eye_color=eye_color
self.color=color
print("고양이 수 증가")
Cat.num_cat+=1
def __del__(self):
print("고양이 수 감소")
Cat.num_cat-=1
( def set_info(self,name,eye_color,color):
self.name=name
self.eye_color=eye_color
self.color=color ) --없어도 되는 부분
def get_num_cat(self):
return Cat.num_cat
myCat0=Cat("야옹이","Black","White")
print("Number of cat:",myCat0.get_num_cat())
myCat1=Cat("방울이","Brown","Black")
print("Number of cat:",myCat1.get_num_cat())
myCat2=Cat("초롱이","White","Brown")
print("Number of cat:",myCat2.get_num_cat())
del myCat2
print("Number of cat:",myCat1.get_num_cat())
(*다른방법
myCat2.__del__())
== RESTART: C:/Users/해니/AppData/Local/Programs/Python/Python36/3.27 exam.py ==
고양이 수 증가
Number of cat: 1
고양이 수 증가
Number of cat: 2
고양이 수 증가
Number of cat: 3
고양이 수 감소
Number of cat: 2
>>>
4. class의 상속
▷상속 : 물려받다
▶클래스는 상속을 통해서 다른 클래스의 기능 및 특징을 이어 받는다.
→class 상속받을 클래스명(상속할 클래스명)
1. 상속에 관련된 클레스는 부모(Parent, Super) 클래스 와 자식 (Child, Sub) 클래스로 구분된다.
2. 자식 클래스는 부모 클래스의 변수 및 메서드를 이용할 수 있다.
3. 자식 클래스는 부모 클래스의 기능 외, 자신만의 기능을 추가할 수 있다
4. 자식 클래스는 부모 클래스 메서드를 수정할 수 있다.
→부모클래스가 수정되면 자식 클래스도 모두 수정됨
---상속 실습 1.
class Housepark :
lastname = "박"
def __init__(self,name) :
self.fullname = self.lastname+name
def travel(self,where):
print("%s ,%s으로 가다"%(self.fullname,where))
class Housekim(Housepark):
lastname = "김"
pay=Housepark("이름")
pay.travel("여행")
juliet = Housekim("줄리엣")
juliet.travel("한국 ")
== RESTART: C:/Users/해니/AppData/Local/Programs/Python/Python36/3.27 exam.py ==
박이름 ,여행으로 가다
김줄리엣 ,한국 으로 가다
>>>
----------상속실습 2.
|
|
RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python36/trse.py
놀기
먹기
잠자기
야옹~
이름: cat 색깔: Black
놀기
먹기
잠자기
멍멍
이름:dog 색깔: Brown
>>>
-------
▷class 상속으로 간단하게 만들기
class Animal :
def set_info(self, name, color): -공통된 특징들
self.name = name
self.color = color
def print_info(self):
print("이름:", self.name, " 색깔:" , self.color)
def play(self):
print("놀기")
def eat(self):
print("먹기")
def sleep(self):
print("잠자기")
class Cat(Animal) : --cat class 생성
def __init__(self):
self.name = "mycat"
self.color = "black"
def speak(self):
print("야옹~")
class Dog(Animal): --dog class 생성
def __init__(self):
self.name = "mydog"
self.color = "brown"
def speak(self):
print("멍멍")
myCat=Cat()
myCat.set_info("cat","Black")
myCat.play()
myCat.eat()
myCat.sleep()
myCat.speak()
myCat.print_info()
myDog=Dog()
myDog.set_info("dog","Brown")
myDog.play()
myDog.eat()
myDog.sleep()
myDog.speak()
myDog.print_info()
= RESTART: C:/Users/해니/AppData/Local/Programs/Python/Python36/3.27 exam2.py =
놀기
먹기
잠자기
야옹
이름 : cat 색깔: Black
놀기
먹기
잠자기
멍멍
이름 : dog 색깔: Brown
>>>
----------------------
-----실습3
class Position:
def __init__(self):
self.x=0
self.y=0
print("Position 초기화")
def set_x(self,x):
self.x=x
def elf_y(self, y):
self.y=y
class Position3D(Position):
def __init__(self): #생성자
self.x=0
self.y=0--- 이부분들을 위로 올려버릴수 있음
self.z=0
print("Position3D초기화")
def set_z(self,z):
self.z=z
pos=Position3D()
pos.x=10
pos.y=20
pos.z=35
print("Position:",pos.x,pos.y,pos.z)
RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python36/exam.py
Position3D초기화
Position: 10 20 35
>>>
-----------
4-1. super()
▶ 부모 클래스에서 자식 클래스에 부르는것
class Position3D(Position):
def __init__(self):#생성자
super().__init__()--super를쓰고 부모클래스의 메서드를 가지고오면 됨
self.z=0
print("Position3D초기화")
--> 초기화 할때 부모클래스의 초기화도 같이 하고 싶다 를 나타냄
class Position:
def __init__(self):
self.x=0
self.y=0
print("Position 초기화")
def set_x(self,x):
self.x=x
def set_y(self,y):
self.y=y
class Position3D(Position):
def __init__(self):
super().__init__()
self.z=0
print("Position3D 초기화")
def set_z(self,z):
self.z=z
pos=Position3D()
pos.x=10
pos.y=20
pos.z=15
print("Position:",pos.x,pos.y,pos.z)
= RESTART: C:/Users/해니/AppData/Local/Programs/Python/Python36/3.27 exam2.py =
Position 초기화
Position3D 초기화
Position: 10 20 15
>>>
---실습
class Animal :
def set_info(self, name, color):
self.name = name
self.color = color
def print_info(self):
print("이름:", self.name, " 색깔:" , self.color)
def play(self):
print("놀기")
def eat(self):
print("먹기")
def sleep(self):
print("잠자기")
class Cat(Animal) :
def __init__(self):
self.name = "mycat"
self.color = "black"
self.eye="white"
def print_info(self):
print("이름:", self.name, " 색깔:" , self.color,"눈:",self.eye)
def speak(self):
print("야옹~")
--->자세히
class Cat(Animal) :
def __init__(self):
self.name = "mycat"
self.color = "black"
self.eye="white"
def print_info(self):--눈이라는 색을 고양이한테만 주려고추가함
print("이름:", self.name, " 색깔:" , self.color,추가-"눈:",self.eye)
def speak(self):
print("야옹~")
▷ 부모의 기능도 재정비해서 다시 바꾸어버릴 수 있음
(고양이만 나타나는 눈이라는 특성)
▷부모의 info도 불러올수 있음
def print_info(self):
super().print_info()
print("이름:", self.name, " 색깔:" , self.color,"눈:",self.eye)
▷공통된 부분을 지우고 추가된 부분만 쓸수 있음
def print_info(self):
super().print_info()
print("눈:",self.eye)
▷부모것을 가져오지 않고 자식것을 바꾸어 줄수도 있음
----------------
class Dog(Animal):
def __init__(self):
self.name = "mydog"
self.color = "White"
def speak(self):
print("멍멍")
myCat=Cat()
myCat.set_info("야옹이","Black")
myCat.play()
myCat.eat()
myCat.sleep()
myCat.speak()
myCat.print_info()
myDog=Dog()
myDog.set_info("멍멍이","Brown")
myDog.play()
myDog.eat()
myDog.sleep()
myDog.speak()
myDog.print_info()
RESTART: C:\Users\Administrator\AppData\Local\Programs\Python\Python36\trse.py
놀기
참치캔 먹기
잠자기
야옹~
이름: 야옹이 색깔: Black
눈: white
놀기
사료 먹기
잠자기
멍멍
이름: 멍멍이 색깔: Brown
'Programing > Python' 카테고리의 다른 글
Python - 13. 파일처리 (0) | 2017.03.30 |
---|---|
Python - 12. Module.Package (0) | 2017.03.30 |
Python - 10. class 기초 (0) | 2017.03.27 |
Python 실습 (0) | 2017.03.25 |
Python - 09. 입력/출력 (0) | 2017.03.22 |