1.面向过程编程

核心思想:把一个需求分解成一系列要执行的步骤,然后按照步骤依次执行这些任务(关注的是流程、步骤)。

适用场景:面向过程编程非常直接,适合简单、线性的任务。

2.面向对象编程

对象可以理解为现实中具体的人/物在程序中的数字化身(万物皆对象)。 它把一个人/物的特征和功能打包到一起,是面向对象编程的基本单元。

3.(1)类:描述的是一组具有相同属性(特征)和方法(功能/行为)的模板。

   (2)对象:对象是类的实例,是基于类创建出来的 (实例对象)。

# 定义类1

class 类名:    

        pass

# 创建对象

对象名 = 类名()

对象名.属性名1 = 属性值1

对象名.属性名2 = 属性值2

# 定义类
class Car:
    pass
# 创建对象
c1 = Car()
c1.brand = "BMW"
c1.name = "X5"
c1.price = 500000
print(c1.__dict__)

说明:

(1) 类名的命名规范,遵循大驼峰命名法,每个单词的首字母都是大写,单词之间没有分隔符,比如:UserInfo,UserAccount 。

(2) __dict__是Python中用户自定义类实例的一个特殊属性,用于以字典形式存储对象的属性 。

# 定义类2

class 类名:    

        def __init__(self, 参数列表):        

        self.属性名 = 参数值        

        self.属性名 = 参数值

# 创建对象

对象名 = 类名(参数列表)

# 定义类
class Car:
    def __init__(self, c_brand, c_name, c_price):
        self.brand = c_brand
        self.name = c_name
        self.price = c_price
# 创建对象
c1 = Car("BMW", "X5", 500000)
print(c1.__dict__)

说明:

(1) 定义在类的外面的称之为函数,定义在类中的函数称之为方法 

(2) __init__ 是初始化方式,对象创建时自动调用,主要用于设置对象的初始状态(设置对象属性)

(3) self是类中定义的方法的第一个参数,表示当前创建的实例对象

4.实例方法

class Car:
    def __init__(self, brand, name, price):
        self.brand = brand
        self.name = name
        self.price = price
    def running(self):
        print(f"{self.brand} {self.name} 正在高速行驶...")
    def total_cost(self, discount, rate):
        return self.price * discount + self.price * rate
c1 = Car("BMW", "X5", 500000)
total_price = c1.total_cost(0.9, 0.1)
print(f"提车总价为: {total_price:.0f}")
c1.running()

5.魔法方法

(1) 魔法方法是指Python中提供的以双下划线开头和结尾的特殊方法,用于定义类的特殊行为,比如:__init__。

(2) 魔法方法是不需要我们手动调用的,Python会在合适的时机自动调用。

class Car:
    def __init__(self, brand, name, price):
        self.brand = brand
        self.name = name
        self.price = price
    def running(self):
        print(f"{self.brand} {self.name} 正在高速行驶...")
    def __str__(self):
        return f"{self.brand} {self.name} {self.price}"
    def __eq__(self, other):
        return self.price == other.price and self.brand == other.brand and self.name == other.name
    def __lt__(self, other):
        return self.price < other.price
c1 = Car("BMW", "X5", 500000)
print(c1)
c2 = Car("BMW", "X5", 500000)
print(c2)
print(c1 == c2)
print(c1 < c2)

说明:Python中提供的__xxx__形式的特殊方法 魔法方法无需手动调用,Python会在合适的时机自动调用

6.属性

(1) 实例属性:实例属性属于每个具体对象的属性,每个对象都是独立的。(各个对象特有的数据)

(2) 类属性:类属性是属于类本身的属性,所有实例共享的。(所有对象共享的数据或配置)(1)

class Car:
    def __init__(self, c_brand, c_name, c_price):
        self.brand = c_brand
        self.name = c_name
        self.price = c_price
    def running(self):
        print(f"{self.brand} {self.name} 正在高速行驶...")

c1 = Car("BYD", "汉", 180000)
c2 = Car("Tesla", "Model Y", 260000)

7.异常:就是程序运行过程中出现的错误,它会中断程序的正常执行流程。

作用: 保证数据、逻辑的正确性,避免程序执行混乱 在开发阶段,尽量发现更多的问题,尽早解决问题,保障程序正常执行。异常不是坏东西,而是编写健壮程序的重要工具

常见异常有:NameError、TypeError、IndexError、KeyError、ValueError

异常处理:程序运行过程中出现异常,有两种处理方案:

(1) 不做处理:整个程序因为一个Bug,中断执行。

(2) 捕获异常:按照我们自己的处理方式,处理完异常,程序继续执行。

try:    

        可能出现异常的业务代码1    

        可能出现异常的业务代码2    

        ...

except [异常类型 as 变量名]:    

        出现异常时的预案

[finally:    

        不管是否出现异常, 都会执行的代码 ]

try:
    print("= = = = = = = = = = = =")
    print(my_name)
    print("= = = = = = = = = = = =")
except NameError as e:
    print("程序运行报错, 错误信息: ", e)
finally:
    print("释放资源 ~")
try:
    print("ABC".hello)
except NameError as e:
    print("。名字不存在,请检查,具体信息:",e)
except ZeroDivisionError as e:
    print("0不能做被除数,请检查,具体信息:",e)
except IndexError as e:
    print("索引错误,请检查,具体信息:",e)
except Exception as e:
    print("其他错误,请检查,具体信息:",e)
finally:
    print("无论正常执行还是出现异常,都要释放资源~")

8.异常传递:异常传递就是异常在函数调用中层层上报的过程,直到有人处理它,或者程序崩溃。

def fun1():
    print("fun1 ... running ...")
    fun2()
def fun2():
    print("fun2 ... running ...")
    fun3()
def fun3():
    print("fun3 ... running ...")
    print(my_color)
if __name__ == '__main__':
    fun1()

更多推荐