Python每天五分钟-面向对象编程之类

面向对象

面向对象编程简称oop(Object Oriented Programming),是一种程序的设计架构。共有三大特性:封装、继承、多态。五大原则:单一职责原则、开放封闭原则、替换原则、依赖原则、接口分离原则。

封装

Python中的类使用class关键字来定义。类在面向对象编程中是占比很大的一部分,定义一个类相当于将某件事物的属性及基本操作归类起来。
例如:我们定义一个person类,person类中可以有身高、体重、年龄、名字等很多属性,可以有跑、跳、叫等基本操作。

class person(object):
	## 类实例化方法
	def __init__(self, name = 'hanmeimei', age = 12):
		self.name = name
		self.age = age

p = person('liming', 10)
print(p.name, p.age)
# 输出结果
# liming 10

类的初始化

__init__是将类实例化的时候调用的方法,即类初始化的方法,第一个参数默认是self也就是实例化对象本身。
当一个类中定义了__init__方法时,实例化的时候就需要传递相应的参数,如果不需要传递,需要指定形参的默认值。

类属性

在实例化类后我们可以定义或者修改类的属性

p.height = '206cm'
p.name = '姚明'
p.age = 24
print(p.name, p.age, p.height)
# 输出结果
# 姚明 24 206cm

类方法

在类内部定义一个获取姓名的方法

class person(object):
	## 类实例化方法
	def __init__(self, name = 'hanmeimei', age = 12):
		self.name = name
		self.age = age
	def getName(self):
		print(self.name)
p = person()
p.getName()
# 输出结果
# hanmeimei

类属性的访问控制

上面定义的属性都可以在类实例化后进行外部访问或修改,如果并不希望某个属性被外部访问或修改,可以在属性前增加两个下划线__,这样这个属性就变成了私有属性,外部是不可直接访问、不可直接修改的。

class person(object):
	## 类实例化方法
	def __init__(self, name = 'hanmeimei', age = 12):
		self.__name = name
		self.__age = age
	def getName(self):
		print(self.__name)
p = person()
print(p.__name)
# 报错结果 AttributeError: 'person' object has no attribute '__name' 表示这个对象没有__name属性

如果需要获取__name可以使用定义的getName()方法。
有时不仅仅是获取,还需要修改。需要定义修改方法。

class person(object):
	## 类实例化方法
	def __init__(self, name = 'hanmeimei', age = 12):
		self.__name = name
		self.__age = age
	def getName(self):
		print(self.__name)
	def setName(self, name):
		self.__name = name
p = person()
p.setName('lilei')
p.getName()
# 输出结果 
# lilei

类的继承

在面向对象编程中继承就是在原有类的基础上再次进行功能封装,并且可以使用或重写原有类的方法、属性,提高了编程效率。一般被继承的类称之为基类、父类,通过继承创建的类称之为子类、派生类。

class Person(object):
	def run(self):
		print('person is running')

class Lilei(Person):
	pass
li = Lilei()
li.run()
# person is running

多态

通过重写父类方法就可以体现多态的特性,多态表示同一个实例的相同方法在不同的业务场景下的不同表现形式。

class Lilei(Person):
	def run(self):
		print('lilei is running....')
li = Lilei()
li.run()
# lilei is running....

子类中可以使用super().run()来调用父类中的方法。

class Lilei(Person):
	def run(self):
		super().run()
		print('lilei is running....')

li = Lilei()
li.run()
# person is running
# lilei is running....