Python - 10

윤기나는코딩·2023년 3월 13일
0

Python

목록 보기
11/16

클래스의 상속 : 다형성을 구사 가능

class Animal: 
    def __init__(self):
        print('Animal 생성자')
        
    def move(self):
        print('움직이는 동물 고양이 - 단풍이')
        
class Dog(Animal):  # 상속
    def __init__(self):   # 자식의 생성자가 있을때 부모생성자 호출 x, 자식 생성자만 호출 o 
        print('Dog 생성자') # 부모 생성자는 따로 명시 해야한다. 
        
    def my(self):
        print('난 강아지~')
        

dog1 = Dog()  
dog1.move()
dog1.my()        
    
print()
class Horse(Animal):
    pass 

horse1 = Horse()
horse1.move()
class Person:
    say = '난 사람'
    age = '29'
    __kbs = '공영방송' # private 멤버변수 - person 클래스에서만 유효하다.
    
    def __init__(self, age):
        print('Person 생성자')
        self.age = age      #
    
    def printInfo(self):
        print('나이:{}, 이야기:{}'.format(self.age, self.say))
            
    def hello(self):
        print('안녕', self.__kbs)

print(Person.say, Person.age)
# Person.printInfo -> 이렇게는 쓸 수 없다. 
p = Person('26') # -> def __init__(self, age) 일로 넘어옴
p.printInfo()
p.hello()

print('***'*10)
'''
class Employee(Person):
    pass
emp= Employee('27') # 부모 생성자가 실행되어서 - age 인자가 필요함
emp.printInfo()
'''
class Employee(Person):
    say = '일하는 동물'
    subject = '근로자'
    
    def __init__(self):  
        print('Employee 생성자')
        
    def printInfo(self):
        print('Employee의 printInfo메소드')
        
    def empPrintInfo(self):
        print(self.say, self.age, self.subject)    
        print(self.say, super().say, super().age) # super(). ->  바로 부모 생성자로 올라감
        self.printInfo() # -> 현재 클래스 부터 뒤짐
        super().printInfo() # -> 바로 부모 클래스로 올라가 뒤짐
        self.hello()
        # print(super().say, super().__kbs) -> 에러남, super().__kbs-> person 클래스에서만 유효
        
        
emp= Employee() # def __init__(self) -> 인자를 하나 더 받으면 에러가 남..
emp.printInfo()
emp.empPrintInfo()

print('***'*10)
class Worker(Person):
    def __init__(self, age):
        print('Worker 생성자')
        super().__init__(age)   # 부모 생성자 호출 - 바운드 메소드 콜

    def wprintInfo(self):
        self.printInfo()
        
wor = Worker('24')
print(wor.say, wor.age)
wor.wprintInfo()

print('***'*10)
class Programmer(Worker):
    def __init__(self, age):
        print('Programmer 생성자')
        # super().__init__(age)    # Bound call
        Worker.__init__(self, age) # UnBound call
    
    def ProShow(self):
        self.printInfo()
    
    
pr = Programmer('내년 30')
print(pr.say, pr.age)
pr.ProShow()


print('~~~~~~~~~~~~~~~~~~~')
print(type(3))
print(type(pr))
print(type(wor))
print(Programmer.__bases__, Worker.__bases__, Person.__bases__)
profile
꾸준히 정리해서 공부한것을 올려보자!

0개의 댓글