一.面向对象的概念
面向对象编程(Object-oriented Programming,简称 OOP),是一种封装代码的方法
为什么要有面向对象:是为了更好地模拟现实世界的事物,并把描述特征的数据和代码块(函数)封装到一起
比如说,将乱七八糟的数据扔进列表中,这就是一种简单的封装,是数据层面的封装;把常用的代码块打包成一个函数,这也是一种封装,是语句层面的封装。
class Person: #比如人有一些属性,名字、性别、年龄等 name = "Mewtwo" sex = "男" age = 21 #人有一些行为动作或者说方法 def run(self): print("人会跑")#会跑 def shop(self): print("人会购物")#会购物 def sleep(self): print("人会睡觉")#会睡觉
面向对象中,常用术语包括:
- 类:可以理解是一个模板,通过它可以创建出无数个具体实例。比如,前面编写的 tortoise 表示的只是乌龟这个物种,通过它可以创建出无数个实例来代表各种不同特征的乌龟(这一过程又称为类的实例化)。
- 对象:类并不能直接使用,通过类创建出的实例(又称对象)才能使用。这有点像汽车图纸和汽车的关系,图纸本身(类)并不能为人们使用,通过图纸创建出的一辆辆车(对象)才能使用。
- 属性:类中的所有变量称为属性。例如,tortoise 这个类中,bodyColor、footNum、weight、hasShell 都是这个类拥有的属性。
- 方法:类中的所有函数通常称为方法。不过,和函数所有不同的是,类方法至少要包含一个 self 参数(后续会做详细介绍)。例如,tortoise 类中,crawl()、eat()、sleep()、protect() 都是这个类所拥有的方法,类方法无法单独使用,只能和类的对象一起使用。
二.类的定义
Python 中使用类的顺序是:先创建(定义)类,然后再创建类的实例对象,通过实例对象实现特定的功能。
如何创建一个类:
class 类名(每个单词首字母大写,单词之间不用符号隔开):
零个到多个类属性...(无先后顺序之分,相互之间可以调用)
零个到多个类方法...(无先后顺序之分,相互之间可以调用)
Python 的类定义由类头(指 class 关键字和类名部分)和统一缩进的类体构成,在类体中最主要的两个成员就是属性和方法。如果不为类定义任何属性和方法,那么这个类就相当于一个空类,如果空类不需要其他可执行语句,则可使用 pass 语句作为占位符。但是空类没有意义,所以比较少用
定义一个类
class Person : '''这是一个学习Python定义的一个Person类''' # 下面定义了一个类属性 hair = 'black' # 下面定义了一个say方法 def say(self, content): print(content)
class 语句只能创建一个类,而无法创建类的对象,因此要想使用已创建好的类,还需要手动创建类的对象,创建类对象的过程又称为类的实例化。
语法:类名(参数)
案例:
class Person : '''定义的一个Person类''' # 定义2个类变量 name = "Mewtwo" age = "22" def __init__(self,name,age): #定义2个实例变量 self.name = name self.age = age print("这个人的名字是:",name," 年龄为:",age) # 定义一个say实例方法 def say(self, content): print(content) # 将该Person对象赋给p变量 p = Person("Mewtwo",22)
类对象的使用
# 类名的角度 # # 操作类中的静态变量 # # 1, Person.__dict__ 查询类中的所有的内容 (不能进行增删改操作) # print(Person.__dict__) # print(Person.__dict__['faith']) # Person.__dict__['mind'] = '无脑' # print(Person.__dict__['mind']) # 2, 万能的 . 对类中的单个的变量进行增删改查,用 万能的 点 # print(Person.mind) # print(Person.animal) # 查 # Person.money = '运用货币' # 增 # Person.mind = '无脑的' # 改 # del Person.mind # print(Person.__dict__) # # #操作类中的方法 (工作中基本不用类名去操作) # # Person.work(111) # # # 对象的角度 # ret = Person() # 类名+()的这个过程:实例化的过程(创建一个对象的过程), # # Person() 实例化对象,实例,对象. # print(ret) # #1,只要类名+() 产生一个对象,自动执行类中的__init__方法. class Person: '''类体:两部分:变量部分,方法(函数)部分''' mind = '有思想' # 变量,静态变量,静态字段 animal = '高级动物' faith = '有信仰' def __init__(self,name,age,hobby): self.name = name # Person.money = '运用货币' self.age = age self.hobby = hobby def work(self): # 方法,函数,动态变量 print('%s都会工作...' %self.name) def shop(self): print('人类可以消费....') # 类名的角度 # 操作类中的静态变量 # 1, Person.__dict__ 查询类中的所有的内容 (不能进行增删改操作) # print(Person.__dict__) # print(Person.__dict__['faith']) # Person.__dict__['mind'] = '无脑' # print(Person.__dict__['mind']) # 2, 万能的 . 对类中的单个的变量进行增删改查,用 万能的 点 # print(Person.mind) # print(Person.animal) # 查 # Person.money = '运用货币' # 增 # Person.mind = '无脑的' # 改 # del Person.mind # print(Person.__dict__) #操作类中的方法 (工作中基本不用类名去操作) # Person.work(111) # 对象的角度 # ret = Person('alex',1000, 'oldwomen') # 类名+()的这个过程:实例化的过程(创建一个对象的过程), # Person() 实例化对象,实例,对象. # print(ret) #1, 类名+()产生一个实例(对象,对象空间.) #2, 自动执行类中的__init__方法,将对象空间传给__init__的self参数, #3, 给对象封装相应的属性. # print(ret.__dict__) # 对象的角度 # 操作对象中的静态变量 #1, __dict__ 查询对象中的所有的内容 #2, 万能的. 万能的 点. # print(ret.name) # 查 # ret.high = 175 # 增 # del ret.name # 删 # ret.age = 73 # 改 # print(ret.__dict__) # 对象操作类中的静态变量 : 只能查询. # print(ret.mind) # 对象调用类中的方法 (工作中 通过对象执行类中的方法,而不是通过类名) # ret.shop() # print(ret)
代码是我看视频的时候看到的,上面是我自己总结的,但是感觉面向对象学的有点懵逼,还没完全懂