类和实例
类就是给python自定义的一种类型,实例就是这个类型的一个对象,要在内存中占有空间。
类的语法
class 类名(父类):
__name = "test" #私有成员变量
age = 20 #成员变量
def __init__(self): #构造函数
print(self.__name)
def func(self): #成员函数
print(self.age)
类的继承
class Video(object):
def __init__(self,path):
pass
class Mp4Video(Video):
def __init__(self):
Video.__init__(self,"d:\\test.mp4")
print("Mp4Video",self.name)
v1 = Mp4Video()
print(dir(Mp4Video)) # dir()函数可以打印所传类中的所有成员
类的创建实例
class Video(object):
#构造函数
def __init__(self):
print("Create Video")
def __del__(self):
print("Delete Video")
video = Video() # 打印 Create Video
print(Video) # 打印 "<class '__main__.Video'>"
print(video) # 打印 "<__main__.Video object at 0x000001A32B83AC88>"
print(dir(video))
print("end")
# 析构函数在整个程序退出后执行
# "Delete Video"在"end"之后打印
上述代码print(Video)
打印出“__main__
为模块名,python中每个文件就是一个模块,多个文件需要有一个入口文件,即从哪一个模块开始执行,__main__
模块相当于C++中的main函数。
类的成员
类的成员创建有多种方法
1 直接通过对象创建成员变量
video.title = "test" # 创建一个title成员
print("title=",video.title) # test
2 在构造函数中通过self
创建成员变量
class Video(object):
def __init__(self):
self.name = "Video name"
video = Video()
print(video.name)
3 上面的方式都是隐式地生成成员变量,还可以直接声明成员变量
class Video(object):
# 声明成员变量
age = 20
# 构造函数 析构函数代码
#
4 声明私有成员变量只需要在成员变量名前面添加__
class Video(object):
# 私有成员变量
__name = "private name"
# 构造函数 析构函数代码
#
def getName(self):
return self.__name
video = Video()
print(video.__name) # 抛出错误,私有成员变量无法访问
print(video.getName()) # 私有成员的正确访问方法
类的继承
我们创建一个Mp4Video类继承上面的Video类,继承会获得父类的所有成员变量和方法
class Mp4Video(Video):
def __init__(self):
print("Create Mp4Video")
mp4 = Mp4Video()
注意:与C++不同,python中在生成子类对象的时候不会去自动调用其父类的构造函数,只会调用子类构造函数。
可用如下方法显示调用父类构造函数
class Mp4Video(Video):
def __init__(self):
Video.__init__(self)
print("Create Mp4Video")
mp4 = Mp4Video()
print(isinstance(mp4,Mp4Video)) # 打印True
print(isinstance(mp4,Video)) # 打印True
同样的,如果子类中也定义了析构函数,Python也只会调用子类的析构函数。若子类没有定义析构函数,则会去调用父类的构造函数
技巧:当有多个继承类,要通过类型来选择时,可以通过isinstance
来判断,利用这样的动态代码,来使我们的设计模式更加便捷