第六课 - 面向对象编程

# 面向对象编程 **面向对象编程**,简称OOP:是一种解决软件服用的设计和编程方法。这种方法把软件系统中相似的逻辑操作、数据、状态等以类的形式描述出来,通过对象实例在软件系统中复用,从而提高软件开发效率。 # 类和对象 **定义和关系** **类**:一个事物的抽象,定义了一类事物的属性和行为。类具有继承,多态,封装等特性。 ``` class 类名: #类命名规则遵守“大驼峰” #默认要传入一个self参数,第一个参数必须是sel def 方法名(self [, 参数列表]): ``` **对象**:通过类创建的一个具体事物,也就是类的实例,它具有状态和行为,可以做具体的事情。 ``` 对象变量名 = 类名() ``` **两者关系**:类相当于创建对象的模板,根据类可以创建一个或者多个对象实例。 # 类的方法 **类的构造方法** _ _init_ _构造方法:用于对象创建时初始化 调用时间:在对象被实例化时被程序自动调用 程序不显示定义init方法,则程序默认调用一个无参init方法 对象创建过程示意图: ![](http://wenda.chinahadoop.cn/uploads/questions/20180418/5e7396ca7507bf70bf4f0b71a76ca407.png) **类的私有方法** 只能在类内部调用,在类的外部无法调用 私有方法:在方法名前添加两个下划线,私有属性如是 类内部调用私有方法要使用**self.private_method()**的方式调用 ``` class Comrade: #私有方法 def __send_message(self): print("消息已经向上级汇报") def answer_secret(self, secret): if secret == "芝麻开门": print("接头成功!") self.__send_message()#调用私有方法 else: print("接头失败!") comrade = Comrade() comrade.answer_secret("芝麻开门") ``` **类的访问权限** ``` #设置对象属性 def __init__(self, gender, variety, name): self.gender = gender self.variety = variety self.name = name ``` 修改对象属性有两种形式: * 直接对属性值进行赋值 * 通过方法对属性值进行修改。这是推荐方式。可以达到对数据进行封装。 # 类的特性一:继承和多重继承 **继承** 定义:在程序中,子类从父类继承,但是子类又可以提供除父类外自身独有的方法和属性。比如猫和狗都是动物,动物如果是父类的话,那么猫和狗就是动物的子类。父类通常是抽象出带有一些共性的特征和方法的类。 ``` #父类Animal class Animal: def eat(): print("eat") #Dog class Dog(Animal): def shout() print("汪汪汪") wangcai = Dog() #调用父类的eat wangcai.eat() #调用自身成员方法 wangcai.shout() ``` **继承注意事项** * 子类的非有属性、方法,会被子类继承 * 子类中方法的查找:先子类方法 =》后父类方法 * 子类可以继承祖先类的非私有属性和方法 * 在子类中调用父类的方法:ClassName.Method(self) **多重继承** 定义:一个类可以从多个父类继承。 多继承的定义方式: ```python class AI: #人脸识别 def face_recongnition(self): print("人脸识别") def data_handle(self): print("AI数据处理") class BigData: def data_analysis(self): print("数据分析") def data_handle(self): print("BigData数据处理") class Python(BigData, AI): #多重继承,Python从BigData和AI两个类继承 def operation(self): print("自动化运维") ``` 对于多重继承,子类调用查找同名方法的顺序: * 取决于小括号内继承父类从左到右的顺序查找。 * 可以通过类的方法 _ _mro_ _来查看查找顺序。 # 类的特性二:多态 定义:一个抽象类有多个子类,不同的类表现出不同的形态。比如狗和猫,他们都会叫,但是叫的声音是不同的。 子类对父类允许访问的方法的实现过程进行重新编写 在子类中定义与父类同名的方法。子类可以根据需要,定义合适的方法实现逻辑。 # 综合例子: 继承和多态 ``` class Animal: def __init__(self): print("---animal构造方法---") def __private_method(self): print("私有方法") def eat(self): print("----吃----") def drink(self): print("----喝----") def run(self): print("----跑----") class Dog(Animal): def __init__(self): print("dog构造方法") #父类方法重写 def run(self): #多态 print("摇着尾巴跑") def hand(self): Animal.run(self) #在子类中调用父类 print("------握手-----") class GoldenDog(Dog): def guid(self): print("我能导航!") ```

0 个评论

要回复文章请先登录注册