"""
一、定义类的继承
类的继承:相关概念在前面已经论述
再来了解一下继承的基本语法
class ClassName(BaseClassName):
.
.
.
在定义类的时候,可以再括号里写继承的类,如果不用继承类的时候,也要写继承object类,因为python中object是所有类的父类
上面的代码时单继承,python也支持多继承
class ClassName(Base1,Base2,....):
.
.
.
多继承需要注意的点:
若是父类中有相同的方法名,而在子类使用时未指定,
python 在圆括号中父类的顺序,从左至右搜索 ,
即方法在子类中未找到时,从左到右查找父类中是否包含方法。
"""
# 那么说了那么多,继承的子类可以干什么呢?
# 1.会继承父类的属性及方法
# 2.可以自己定义,覆盖父类的属性和方法
# 二、调用父类的方法
# 继承父类的方法
# 直接看例子
class UserInfo(object):
ou = 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, 123345)
print(userInfo2.get_account())
# 很难理解,先不急,后续慢慢理解呢
# 三、父类方法的重写
class UserInfo(object):
ou = 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.ou
@property
def get_age(self):
return self._age
class UserInfo2(UserInfo):
pass
if __name__ == '__main__':
userInfo2 = UserInfo2('奥特曼', 23, 123345, '男')
# 打印所有属性
print(dir(userInfo2))
# 打印构造函数中的属性
print(userInfo2.__dict__)
print(userInfo2.get_name())
# 这样就重写了父类的方法
# 三、子类的类型判断
# 首先用到的函数是isinstance(),对于class的继承关系来说,有时需要判断他的类型
class user1(object):
pass
class user2(user1):
pass
class user3(user2):
pass
# 快捷方式输入main
if __name__ == '__main__':
A1 = user1()
A2 = user2()
A3 = user3()
# 用isinstance判断一个对象是什么类型
print(isinstance(A1, user2))
print(isinstance(A1, user1))
print(isinstance(A1, user3))
# 基本类型也可以用他判断
print(isinstance('奥特曼', str))
print(isinstance(1234, int))
print(isinstance(234567, str))
# 通过运行结果可以发现isinstance不仅可以告诉我们,一个对象是否为某种类型,也可以用于基本类型的判断