Torres-tao  
  • 面向对象:以对象为中心的编程思想,通过指挥对象实现具体功能
  • 面向过程:以过程为中心的编程思想,实现具体功能都是自己实现

1、类的描述

类:

  1. 类是对现实生活类中具有共同属性和行为的实物的抽象
  2. 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合
  3. 类就是对现实事务的一种描述

对象:

​ 是以类为模板所创建的实例,通过实例对象可以执行类中的函数

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()
posted on 2022-03-24 15:18  雷子锅  阅读(155)  评论(0编辑  收藏  举报