- 面向对象:以对象为中心的编程思想,通过指挥对象实现具体功能
- 面向过程:以过程为中心的编程思想,实现具体功能都是自己实现
1、类的描述
类:
- 类是对现实生活类中具有共同属性和行为的实物的抽象
- 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合
- 类就是对现实事务的一种描述
对象:
是以类为模板所创建的实例,通过实例对象可以执行类中的函数
2、类的创建
#创建类
class Foo(): #class是关键字(表示要开始创建类了);Foo是新建类名称
#创建类中函数
def bar(self): #self特殊参数
print("Bar")
def hello(self,name):
print("I am %s" % name)
#根据Foo创建对象
obj = Foo()
obj.bar() #执行bar方法
obj.hello("Torres") #执行hello方法
3、面向对象三大特性
面向对象的三大特性是指:封装、继承和多态。
3.1、封装
封装,就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
在使用面向对象的封装特性时,需要:
- 将内容封装到某处
- 从某处调用被封装的内容
第一步:创建类,封装内容
class Foo:
def __init__(self,name,age)
'''初始化实例属性'''
self.name = name
self.age = age
#根据类Foo创建对象
obj1 = Foo("taolei",18) #将taolei和18分别封装到obj1/self的name和age属性中(此处obj1其实就是self)
obj2 = Foo("Torres",23) #将Torres和23分别封装到obj1/self的name和age属性中(此处obj2其实就是self)
第二步:从类中调用被封装的内容
调用被封装的内容时,有两种情况:
- 通过对象直接调用
- 通过self间接调用
1、通过对象直接调用被封装的内容
class Foo:
def __init__(self,name,age)
'''初始化实例属性'''
self.name = name
self.age = age
obj1 = Foo("taolei",18)
print(obj1.name)
print(obj1.age)
obj2 = Foo("Torres",23)
print(obj2.name)
print(obj2.age)
2、通过self间接调用被封装的内容(执行类中的方法时,需通过self间接调用被封装的内容)
class Foo:
def __init__(self,name,age)
'''初始化实例属性'''
self.name = name
self.age = age
def detail(self):
print(self.name)
print(self.age)
obj1 = Foo("taolei",18)
obj1.detail()
obj2 = Foo("Torres",23)
obj2.detail()
3.2、继承
继承,即子可以继承父的内容
#!/usr/bin/python3
#coding=utf-8
class Car():
'''
一次模拟汽车的简单尝试
'''
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_desc_name(self):
long_name = str(self.year) + " " + self.make + " " + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self,mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self,miles):
self.odometer_reading += miles
class ElectricCar(Car):
'''
电动车的独特之处
'''
def __init__(self,make,model,year):
"""初始化父类的属性"""
super().__init__(make,model,year)
self.battery_size = 70
def describe_battery(self):
"""打印一条描述电瓶容器的消息"""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
if __name__ == "__main__":
my_tesla = ElectricCar("tesla","model s",2016)
print(my_tesla.get_desc_name())
my_tesla.describe_battery()
"""
[root@aliyun DevOps]# python3 /home/python/electric_car.py
2016 Tesla Model S
This car has a 70-kWh battery.
"""
对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。
注:除了父类和子类的称谓,子类也被称为:派生类;父类也被称为:基类。
3.3、多态
不同的对象都可以响应同一方法,但是执行结果各不相同
更通俗的讲,多态是指一类事物有多种形态。比如动物有多种形态,人、狗、猫等等;在二进制的世界,例如文件,文件有多种形态:文本文件、可执行文件。
总而简言,多态即某类的再分类,再分的每一类就是父类的多种形态的一种
3.3.1、使用场景
- 统一管理
- 方法返回统一父类的不同对象
- 方法参数接收同一父类的不同子类对象
3.3.2、实现方式
- 不同子类继承同一父类,重写要执行的方法,保证执行结果各不相同
- 采用鸭子模型的思想,为任意一个类植入需要的方法也可以实现
class Animal:
def run(self):
raise AttributeError("子类必须实现这个方法")
class People(Animal):
def run(self):
print("人正在走路")
class Dog(Animal):
def run(self):
print("dog is running")
peo1 = People()
dog1 = Dog()
peo1.run()
dog1.run()