클래스 상속
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())마지막 인쇄 결과:
이것은 다시 작성된 상위 클래스의 생성자입니다.
클래스의 상속관계에 있어서 클래스의 타입을 판단해야 할 때가 있습니다.
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()는 객체가 특정 유형인지 여부를 알려줄 수 있을 뿐만 아니라 기본 유형을 판단하는 데에도 사용할 수 있음을 알 수 있습니다.
- 코스 추천
- 코스웨어 다운로드
현재 코스웨어를 다운로드할 수 없습니다. 현재 직원들이 정리하고 있습니다. 앞으로도 본 강좌에 많은 관심 부탁드립니다~ 















