클래스 상속

1. 클래스 상속 정의

우선 클래스 상속의 기본 구문을 살펴보겠습니다.

class ClassName(BaseClassName):
    <statement-1>
    .
    .
    .
    <statement-N>

클래스를 정의할 때 처음에 언급한 것처럼 상속받은 클래스를 괄호 안에 작성할 수 있습니다. 사용하지 마세요. 클래스를 상속할 때 객체 클래스도 상속하도록 작성해야 합니다. Python에서는 객체 클래스가 모든 클래스의 상위 클래스이기 때문입니다.

물론 위의 내용은 단일 상속이고 Python도 다중 상속을 지원하며 구체적인 구문은 다음과 같습니다.

class ClassName(Base1,Base2,Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

다중 상속에 대해 주의할 점: 상위 클래스의 메서드 이름이 동일하지만 언제 지정되지 않는지 하위 클래스에서 이를 사용하면 Python은 괄호 안의 상위 클래스 순서에 따라 왼쪽에서 오른쪽으로 검색합니다. 즉, 하위 클래스에서 메서드를 찾을 수 없으면 왼쪽에서 오른쪽으로 검색하여 상위 클래스에 해당 메서드가 포함되어 있는지 확인합니다. .

그렇다면 상속된 하위 클래스는 무엇을 할 수 있나요?

상속된 하위 클래스의 이점:

상위 클래스의 속성과 메서드를 상속받습니다.

이를 직접 정의하고 상위 클래스의 속성과 메서드를 재정의할 수 있습니다.

2상위 클래스의 메서드를 호출합니다. 클래스가 상위 클래스를 상속합니다. 클래스를 추가한 후 상위 클래스의 메소드를 직접 호출할 수 있습니다. 예를 들어 다음 예에서 UserInfo2는 상위 클래스 UserInfo를 상속하며 상위 클래스의 get_account 메소드를 직접 호출할 수 있습니다.

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
class UserInfo(object):
    lv = 5
    def __init__(self, name, age, account):
        self.name = name
        self._age = age
        self.__account = account
    def get_account(self):
        return self.__account
class UserInfo2(UserInfo):
    pass
if __name__ == '__main__':
    userInfo2 = UserInfo2('两点水', 23, 347073565);
    print(userInfo2.get_account())

3. 상위 클래스 메서드 재작성

물론 상위 클래스 메서드를 재정의할 수도 있습니다.

예:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
class UserInfo(object):
    lv = 5
    def __init__(self, name, age, account):
        self.name = name
        self._age = age
        self.__account = account
    def get_account(self):
        return self.__account
    @classmethod
    def get_name(cls):
        return cls.lv
    @property
    def get_age(self):
        return self._age
class UserInfo2(UserInfo):
    def __init__(self, name, age, account, sex):
        super(UserInfo2, self).__init__(name, age, account)
        self.sex = sex;
if __name__ == '__main__':
    userInfo2 = UserInfo2('两点水', 23, 347073565, '男');
    # 打印所有属性
    print(dir(userInfo2))
    # 打印构造函数中的属性
    print(userInfo2.__dict__)
    print(UserInfo2.get_name())

마지막 인쇄 결과:

cbf5cc8617f8b40e0e38e94fd0d892e.png이것은 다시 작성된 상위 클래스의 생성자입니다.

4. 서브클래스의 타입 판단


클래스의 상속관계에 있어서 클래스의 타입을 판단해야 할 때가 있습니다.

isinstance() 함수를 사용할 수 있습니다.

예제를 통해 isinstance() 함수의 사용법을 이해할 수 있습니다.

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
class User1(object):
    pass
class User2(User1):
    pass
class User3(User2):
    pass
if __name__ == '__main__':
    user1 = User1()
    user2 = User2()
    user3 = User3()
    # isinstance()就可以告诉我们,一个对象是否是某种类型
    print(isinstance(user3, User2))
    print(isinstance(user3, User1))
    print(isinstance(user3, User3))
    # 基本类型也可以用isinstance()判断
    print(isinstance('两点水', str))
    print(isinstance(347073565, int))
    print(isinstance(347073565, str))

의 출력 결과는 다음과 같습니다.

True
True
True
True
True
False

isinstance()는 객체가 특정 유형인지 여부를 알려줄 수 있을 뿐만 아니라 기본 유형을 판단하는 데에도 사용할 수 있음을 알 수 있습니다.

지속적인 학습
  • 코스 추천
  • 코스웨어 다운로드
현재 코스웨어를 다운로드할 수 없습니다. 현재 직원들이 정리하고 있습니다. 앞으로도 본 강좌에 많은 관심 부탁드립니다~