面向对象编程
面向对象编程,简称OOP:是一种解决软件服用的设计和编程方法。这种方法把软件系统中相似的逻辑操作、数据、状态等以类的形式描述出来,通过对象实例在软件系统中复用,从而提高软件开发效率。
类和对象
定义和关系
- 类:一个事物的抽象,定义了一类事物的属性和行为。类具有继承,多态,封装等特性。
class 类名: #类命名规则遵守“大驼峰”
def 方法名(self [, 参数列表]): #默认要传入一个self参数,而且第一个参数必须是self
- 对象:通过类创建的一个具体事物,也就是类的实例,它具有状态和行为,可以做具体的事情。
对象变量名 = 类名()
- 两者关系:类相当于创建对象的模板,根据类可以创建一个或者多个对象实例。
类的方法
类的构造方法
- **_ init _**构造方法:用于对象创建时初始化
- 调用时间:在对象被实例化时被程序自动调用
- 程序不显示定义init方法,则程序默认调用一个无参init方法
- 对象创建过程
类的私有方法
- 只能在类内部调用,在类的外部无法调用
- 私有方法:在方法名前添加两个下划线,私有属性如是
- 类内部调用私有方法要使用**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)
多重继承 定义:一个类可以从多个父类继承。 多继承的定义方式:
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): #多重继承
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("我能导航!")