# 类继承
class Video(object):
# 4、私有成员变量 两个下划线开头定义的变量就是私有成员变量
__name = "private name"
# 3、直接声明成员变量
# 声明的意思是这个变量的空间不产生,只有当Video生成对象的时候这个空间才产生,所以叫声明
age = 20
path = ""
# 构造函数
def __init__(self, path):
print("Create Video")
self.name = "public name"
self.path = path
print("path is", self.path)
# Python约定了我们函数名全部是小写
def get_name(self):
return self.__name
# 析构函数
def __del__(self):
print("Delete Video")
# 类继承
class Mp4Video(Video):
def __init__(self):
print("Create Mp4Video")
mp4 = Mp4Video()
print(mp4)
程序输出:
Create Mp4Video
Delete Video
<__main__.Mp4Video object at 0x000001E5ADF30390>
我们可以看到Create Mp4Video,但是并没有调用我们父类的构造方法,这个跟我们C++里面的并不一致,C++里面在生成一个子类的对象的时候,会自动调用父类的构造方法。
但是在Python中并没有调用父类的构造方法,在Python这边只调用子类的构造函数,不会主动调用父类的构造函数。
# 类继承
class Video(object):
# 4、私有成员变量 两个下划线开头定义的变量就是私有成员变量
__name = "private name"
# 3、直接声明成员变量
# 声明的意思是这个变量的空间不产生,只有当Video生成对象的时候这个空间才产生,所以叫声明
age = 20
path = ""
# 构造函数
def __init__(self, path):
print("Create Video")
self.name = "public name"
self.path = path
print("path is", self.path)
# Python约定了我们函数名全部是小写
def get_name(self):
return self.__name
# 析构函数
def __del__(self):
print("Delete Video")
# 类继承
class Mp4Video(Video):
def __init__(self, path): # 不会主动调用父类构造函数,需要显式调用父类构造函数
Video.__init__(self, path)
print("Create Mp4Video")
def __del__(self):
print("Delete Mp4Video")
mp4 = Mp4Video("e:/test.mp4")
print("mp4.get_name()", mp4.get_name())
程序输出:
Create Video
path is e:/test.mp4
Create Mp4Video
Delete Mp4Video
mp4.get_name() private name
我们可以看到跟C++中的不同,Python中只调用了子类的析构函数,它不会调用父类的析构函数。
继承,就是父类的所有参数和方法我们都获得了。
有时候我们在继承当中,会用到一些多态,那这个时候我们需要去判断你这个对象是什么类型,是哪一个类,那你怎么判断?
Python提供了一个方法:isinstance()
# 类继承
class Video(object):
# 4、私有成员变量 两个下划线开头定义的变量就是私有成员变量
__name = "private name"
# 3、直接声明成员变量
# 声明的意思是这个变量的空间不产生,只有当Video生成对象的时候这个空间才产生,所以叫声明
age = 20
path = ""
# 构造函数
def __init__(self, path):
print("Create Video")
self.name = "public name"
self.path = path
print("path is", self.path)
# Python约定了我们函数名全部是小写
def get_name(self):
return self.__name
# 析构函数
def __del__(self):
print("Delete Video")
# 类继承
class Mp4Video(Video):
def __init__(self, path): # 不会主动调用父类构造函数,需要显式调用父类构造函数
Video.__init__(self, path)
print("Create Mp4Video")
def __del__(self):
print("Delete Mp4Video")
mp4 = Mp4Video("e:/test.mp4")
class AviVideo(Video):
pass
print(isinstance(mp4, Mp4Video))
print(isinstance(mp4, Video))
print(isinstance(mp4, AviVideo))
程序输出:
Create Video
path is e:/test.mp4
Create Mp4Video
Delete Mp4Video
True
True
False
通过这个方法,当你有多个继承类的时候,你根据它的类型来选择的时候,你可以通过这个来判断,使得我们在做设计模式的时候更加的便捷。