티스토리 뷰


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.

class Cat:
    def __init__(self):
        self.name = "mycat"
        self.color = "black"
       
    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("잠자기")
       
    def speak(self):
        print("야옹~")


myCat=Cat()
myCat.set_info("cat","Black")
myCat.play()
myCat.eat()
myCat.sleep()
myCat.speak()
myCat.print_info()

class Dog:

    def __init__(self):
        self.name = "mydog"
        self.color = "black"
       
    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("잠자기")
       
    def speak(self):
        print("멍멍")


myDog=Dog()
myDog.set_info("dog","Brown")
myDog.play()
myDog.eat()
myDog.sleep()
myDog.speak()
myDog.print_info()


 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함