In [ ]:
class Person(object):
    
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
        
    def has_right(self):
        return True

상속 받을 경우 부모 클래스의 __init__ 메소드가 자동으로 실행됩니다.


In [ ]:
class Man(Person):
    pass

In [ ]:
ricky = Man('ricky park', 'M')

In [ ]:
ricky.__class__

ricky는 Man과 Person의 객체입니다.


In [ ]:
isinstance(ricky, Man)

In [ ]:
isinstance(ricky, Person)

In [ ]:
ricky.gender

In [ ]:
ricky.has_right()

상위 클래스의 메소드를 오버라이딩 할 수 있습니다.


In [ ]:
class Woman(Person):
    
    def __init__(self, name, gender, weight):
        super(Woman, self).__init__(name, gender)
        self.__weight = weight
        
    def has_right(self):
        return 1
    
    def __get_weight(self):
        return self.__weight

In [ ]:
jane = Woman('jane kim', 'F', 50)

In [ ]:
jane.has_right()

private 메소드로 표시하는 것은 이름을 변형(name mangling)시킬 뿐 외부에서 접근 가능합니다.


In [ ]:
jane.__get_weight()

In [ ]:
jane._Woman__get_weight()

In [ ]:
jane.gender

겹밑줄인 변수도 이름이 변형되지만 여전히 외부에서 접근이 가능합니다.


In [ ]:
jane.__weight

In [ ]:
jane._Woman__weight

In [ ]: