1 基础概念
1.什么是类?
具有相同方法和属性的一类事物。2.什么是对象、实例 ?
一个拥有具体属性值和动作的具体个体。
3.实例化
从一个类 得到一个具体对象的过程。
4.组合
一个类的对象作为另一个类对象的实例变量。
2 面向对象的基本格式与作用
- 1.类(只要类存在,不需特地去执行)内部代码会自动从上到下依次执行,类变量会直接执行,方法只有被调用时,方法内部的代码才会执行。
- 2.类也可以嵌套到类里面(内部代码执行顺序同上)。
2.1 面向对象的基本格式
# ###### 定义类 ######
class 类名:
def 方法名(self,name):
print(name)
return 123
def 方法名(self,name):
print(name)
return 123
def 方法名(self,name):
print(name)
return 123
# ###### 调用类中的方法 ######
# 1.创建该类的对象
obj = 类名()
# 2.通过对象调用方法
result = obj.方法名('alex')
print(result)
应用场景:遇到很多函数,需要给函数进行归类和划分。 【封装】
面向对象中有三个关键词:类 / 对象 / 方法
小练习:
1.类和对象是什么关系?
对象是类的一个实例。
class Foo: def __init__(self,name): self.name = name def run(self): pass obj1 = Foo('ale') obj2 = Foo('eric')
2.self是什么?
self就是一个形式参数,对象调用方法时,python内部会将该对象传给这个参数。
class Foo: def run(self,num): pass obj = Foo() obj.run(5)
示例:
class Db:
def db_read(self):
pass
def db_write(self):
pass
def db_delete(self):
pass
def db_update(self):
pass
class File:
def file_read(self):
pass
def file_write(self):
pass
def file_delete(self):
pass
def file_update(self):
pass
2.2.对象的作用
存储一些值,以后方便自己使用。
# 示例一
class File:
def read(self):
with open(self.xxxxx, mode='r', encoding='utf-8') as f:
data = f.read()
return data
def write(self, content):
with open(self.xxxxx, mode='a', encoding='utf-8') as f:
f.write(content)
# # 实例化了一个File类的对象
obj1 = File()
# # 在对象中写了一个xxxxx = 'test.log'
obj1.xxxxx = "test.log"
# # 通过对象调用类中的read方法,read方法中的self就是obj。
# # obj1.read()
obj1.write('alex')
# 实例化了一个File类的对象
obj2 = File()
# 在对象中写了一个xxxxx = 'test.log'
obj2.xxxxx = "info.txt"
# 通过对象调用类中的read方法,read方法中的self就是obj。
# obj2.read()
obj2.write('alex')
# 示例二
class Person:
def show(self):
temp = "我是%s,年龄:%s,性别:%s " %(self.name,self.age,self.gender,)
print(temp)
p1 = Person()
p1.name = '张三'
p1.age = 19
p1.gender = '男'
p1.show()
p2 = Person()
p2.name = '李四'
p2.age = 19
p2.gender = '男'
p2.show()
# 示例三
class Person:
def __init__(self,n,a,g): # 初始化方法,给对象的内部做初始化。
self.name = n
self.age = a
self.gender = g
def show(self):
temp = "我是%s,年龄:%s,性别:%s " % (self.name, self.age, self.gender,)
print(temp)
# 类() 实例化对象,自动执行此类中的 __init__方法。
p1 = Person('家琪',19,'男')
p1.show()
p2 = Person('利奇航',19,'男')
p2.show()
总结:将数据封装到对象,方便使用。
什么时候用面向对象?
-
- 函数(业务功能)比较多,可以使用面向对象来进行归类。
-
- 想要做数据封装(创建字典存储数据时,可以使用面向对象)。
-
- 游戏示例:创建一些角色并且根据角色需要再创建人物。
2.3 总结
如果写代码时,函数比较多比较乱。
-
- 可以将函数归类并放到同一个类中。
- 函数如果有一个反复使用的公共值,则可以放到对象中。
class File:
def __init__(self,path):
self.file_path = path
def read(self):
print(self.file_path)
def write(self,content):
print(self.file_path)
def delete(self):
print(self.file_path)
def update(self):
print(self.file_path)
p1 = File('log.txt')
p1.read()
p2 = File('xxxxxx.txt')
p2.read()
# 1. 循环让用户输入:用户名/密码/邮箱。 输入完成后再进行数据打印。
# ########## 以前的写法
USER_LIST = []
while True:
user = input('请输入用户名:')
pwd = input('请输入密码:')
email = input('请输入邮箱:')
temp = {'username':user,'password':pwd,'email':email}
USER_LIST.append(temp)
for item in USER_LIST:
temp = "我的名字:%s,密码:%s,邮箱%s" %(item['username'],item['password'],item['email'],)
print(temp)
# ########## 面向对象写法
class Person:
def __init__(self,user,pwd,email):
self.username = user
self.pas