Wxf`s Fantasy World

share something useful


Python面向对象

在写软件的过程中发现很多基础知识不牢固,快速过一遍。

风格:面向对象,面向对象实现方法:封装、继承、多态,首先从python类开始

函数调用方法

class cat:
    index = 0
    def __init__(self,name):
        self.name = name
    def run(self):
        print("cat run")

def main():
    p = cat("miao")
    p.run()

if __name__ == "__main__":
    main()

python默认main函数为其入口,def main,然后添加if name xxx,这两段后,在main中实现逻辑,执行即可

类和函数

类比函数多了一个self参数,self是类的实例(具体是类实例的地址),index可以在类实例间共享

类调用是先生成实例,然后用实例的指针(self)去访问内部变量,比如self.name

class声明语法实现了类的封装

类的继承

class SubClassName (ParentClass1[, ParentClass2, ...]):
    

按上述语法将父类指针传递到子类,就可以在子类实例中实现父类方法了,一个子类可以继承多个父类
父类方法查找:
解释器按照MRO中的顺序,逐个在父类中查找这个方法。一旦找到,解释器就会使用找到的方法。
也就是说,在执行过程中,python解释器会自己去父类中索引子类中没有的方法并调用,而不是拷贝父类方法到子类再调用

class animal:
    def __init__(self):
        pass
    def echo(self):
        print(self.name)

class cat(animal):
    index = 0
    def __init__(self,name):
        self.name = name
    def run(self):
        print("cat run")

def main():
    p = cat("miao")
    #p.run()
    p.echo()

if __name__ == "__main__":
    main()
结果miao

类的多态

多态用到运算符重载、方法重载。重写方法

class animal:
    def __init__(self):
        pass
    def echo(self):
        print(self.name)

class cat:
    index = 0
    def __init__(self,name):
        self.name = name
    def run(self):
        print(self.name)
    def echo(self):
        print("cat echo")

def main():
    p = cat("miao")
    #p.run()
    p.echo()

if __name__ == "__main__":
    main()
结果cat echo