面向对象编程

面向对象编程,简称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("我能导航!")