面向对象编程OOP(Object Oriented Programming)
基本名词
-
C语言是面向过程的编程语言(负责完成某个具体任务的代码;即函数;把要实现的事情拆分成一个个步骤并依次完成;程序执行效率高)。
-
Python语言和Java语言是面向对象的编程语言,先考虑对象的属性、方法等,再定义类,通过类创建对象,类是创建对象的模板,对象是类的实例。
-
属性attribute:颜色、大小、体积、编号等,即放在类里面的变量。
-
方法method:移动、放大、缩小、变色、打印等,即放在类里面的函数。
-
面向对象编程的三个特征:封装、继承、多态。
-
封装:写类的人将内部实现细节隐藏,使用类的人通过外部接口访问和使用(接口:提供使用的方法)
-
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
-
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
-
方法:类中定义的函数。
-
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
-
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
-
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
-
局部变量:定义在方法中的变量,只作用于当前实例的类。
-
实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
-
实例化:创建一个类的实例,类的具体对象。
-
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
基本代码
类定义属性(对象有什么性质)
注意左右双下划线
class CuteCat: # pascal名命法:首字母大写,适用于类名
def __init__(self): # 第一个参数永远是self,用于表示对象自身,用于把属性的值绑定在实例对象上
self.name = 'lulu' # self.name 表示对象的name属性的值
# name = 'lulu' # 没有self 默认只是给普通的name变量赋值,不会把值看成对象的属性
cat1 = CuteCat() # 创建对象是用类名(参数),这样子_init_方法会被调用,并返回一个对象,self参数不需要手动传入
print(cat1.name) # 返回lulu
class CuteCat: # 创建类
def __init__(self,cat_name,cat_age,cat_color): # 定义属性
self.name = cat_name # self.name 对象的属性
self.age = cat_age
self.color = cat_color
cat1 = CuteCat('lulu',2,'白色') # 调用类,传入属性的值
print(f'小猫{cat1.name}的年龄是{cat1.age}岁,花色是{cat1.color}的。') # 小猫lulu的年龄是2岁,花色是白色的。
类定义方法(对象能做什么事情)
class CuteCat: # 创建类
def 方法名(self,'参数'): # 定义方法
语句A
cat1 = CuteCat.方法名('参数') # 创建实例,调用类 实例名.方法名
实例
# 定义类
class city:
def __init__(self,city_name,country):
self.city_name = city_name
self.country = country
def describe_city(self):
print(f"城市名:{self.city_name},来自{self.country}。")
def welcome(self):
print(f'welcome to {self.city_name}!')
# 创建实例
foshan = city('foshan','China')
# 打印对象属性
print(foshan.city_name) # foshan
print(foshan.country) # China
foshan.describe_city() # 城市名:foshan,来自China。
foshan.welcome() # welcome to foshan!