类和实例

就是给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来判断,利用这样的动态代码,来使我们的设计模式更加便捷

© liangqi all right reserved,powered by Gitbook文件修订时间: 2019-05-22

results matching ""

    No results matching ""