Python/Study

python 기초 - class (부모, 자식 class, init, super)

pybi 2023. 1. 15. 15:13

class는 다들아는것처럼 붕어빵 틀과 같다. 다양한 값을 가진 변수를 생성할 수 있다.

class Person:
    def __init__(self, name):
        self.name = name
        print(f"{self.name} 태어남")
        
p1 = Person("pymin")
p2 = Person("pymin2")
pymin 태어남
pymin2 태어남

 

아래처럼 함수추가하면 변수에 .{함수} 로 만든 변수에 함수를 추가로 실행할 수있다.

class Person:
    def __init__(self, name):
        self.name = name
        print(f"{self.name} 태어남")
        
    def school(self, school_name):
        print(f"{self.name}이/가 {school_name}에 입학함")
        
p1 = Person("pymin")
p2 = Person("pymin2")

p1.school("A학교")
p2.school("B학교")
pymin 태어남
pymin2 태어남
pymin이/가 A학교에 입학함
pymin2이/가 B학교에 입학함

 

class는 상속이 가능하다. 아래처럼 새로 Home이라는 class에 Person을 상속할 수 있다. 그러면 Home이라는 Class는 Person의 기능을 모두 사용 가능하고 특정 부분만 내가 원하는대로 업데이트가 가능하다.

class Person:
    def __init__(self, name):
        self.name = name

    def school(self, school_name):
        print(f"{self.name}이/가 {school_name}에 입학함")

class Home(Person):
    def __init__(self, name, location):
        Person.__init__(self, name)
        self.location = location
        print(f"{self.name}이/가 {self.location}에서 태어남")

p1 = Home("pymin", "강남")
p2 = Home("pymin2", "강북")

p1.school("초등학교")
pymin이/가 강남에서 태어남
pymin2이/가 강북에서 태어남
pymin이/가 초등학교에 입학함

 

class 상속은 1개가 아니라 여러개도 가능하다. 아래는 2개를 상속하였다.

class Person:
    def __init__(self, name):
        self.name = name

    def school(self, school_name):
        print(f"{self.name}이/가 {school_name}에 입학함")

class Money:
    def __init__(self, cash):
        self.cash = cash 


class Home(Person, Money):
    def __init__(self, name, location, cash):
        Person.__init__(self, name)
        Money.__init__(self, cash)
        self.location = location
        print(f"{self.name}이/가 {self.location}에서 {self.cash}를 가지고 태어남")


p1 = Home("pymin", "강남" , "100원")
p2 = Home("pymin2", "강북", "500원")
pymin이/가 강남에서 100원를 가지고 태어남
pymin2이/가 강북에서 500원를 가지고 태어남

 

super()를 통해서 부모 클래스에 접근이 가능하다. (이때 self는 제거) 이렇게 하면 아까 Person.__init__()와 동일하다.

*super()라는 함수를 이용하여 부모 클래스의 __init__() 매직 메소드를 자식 클래스에 실행시킨다고 보면 된다. 매우 자주 쓰인다.

class Person:
    def __init__(self, name):
        self.name = name

    def school(self, school_name):
        print(f"{self.name}이/가 {school_name}에 입학함")

class Home(Person):
    def __init__(self, name, location):
        super().__init__(name)
        self.location = location
        print(f"{self.name}이/가 {self.location}에서 태어남")

p1 = Home("pymin", "강남" )
p2 = Home("pymin2", "강북")
pymin이/가 강남에서 태어남
pymin2이/가 강북에서 태어남