面向过程(procedural programming)就是程序从上到下一步步执行,从头到尾的解决问题,如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程的方式最好
面向对象(object-oriented Programming,简称 OOP)是利用 类 和 对象 来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因 一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率
类是一类具有相同属性和方法的集合
一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象可以有不同的属性,就像人类是指所有人,每个人是具体的对象,人与人之间由共性,亦有不同
在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面保护着类的数据和方法
封装的优点:减少耦合;类内部的结构可以自由修改;对成员变量进行更精确的控制;隐藏实现细节
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承,继承分为 单继承和多继承
继承的优点:增加了类的耦合性;减少了重复代码;使得代码更加规范化、合理化
一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态
封装和继承的目的是为了实现代码的复用,而多态是为了实现接口重用,使得类在继承和派生的时候能够保证任何一个类的实例都能正确调用约定好的属性和方法
class Dog: # 类名首字母要大写,驼峰体
d_type = "京巴" # 公共属性,又称类变量
def __init__(self, name, age): # 初始化函数,只要一实例化,就会自动执行
self.name = name # self.name 就是实例自己的变量
self.age = age
def say_hi(self): # 类方法,必须带一个self参数,代表实例本身
# 想要调用类里的属性,都有加上self
print("dog name is %s" % self.name)
d = Dog('maomao', 2) # 生成一个狗的实例
d2 = Dog('dandan', 3)
d.say_hi() # 调用类方法
d2.say_hi()
print(d.name, d.age) # 调用实例的变量
print(d.d_type) # 调用类的变量
# 属性的增删改查
class Person:
nationality = "chinese"
addr = "北京"
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
# 实例属性操作
p = Person('Alex', 20, 'Male')
p.name = 'Bob' # 修改属性
p.job = 'CEO' # 添加实例属性
del p.sex # 删除实例属性
print(p.job) # 打印添加的实例属性
# 类属性操作
Person.nationality = "USA" # 类属性修改
Person.race = "Yellow" # 类属性添加
del Person.addr # 删除类属性
print(p.addr) # 再调用已删除的类属性就会报错