这个是我们在Python基础内容讲解的末章了,下次我会更新正则表达式和测试试题,然后就完结了一步步学习Python的基础内容讲解了,大家可以看看我前面的文章投票一下之后我们是先讲Linux还是先讲数据库,持续关注给你带来更多优质文章!!
一.常见内置函数
'''
hasattr(qingjiao,'sex') # 判断属性是否存在
getattr(qingjiao,'sex') = qingjiao.sex # 得到属性值 没有就报错
setattr(qingjiao,'sex','男') # 添加属性,属性值
delattr(qingjiao,'sex') # 删除属性
'''
'''
# issubclass(HunXue,(HuNan,SiChuan)) # 判断第一个类是不是后面类中(某一个)的子类
# isinstance(qingjiao,(GuangDong,JiangXi)) # 判断实例是不是后面类中(某一个)的实例
'''
trips:
拓展用法(isinstance) 判断数据的类型
'''
isinstance(1,int)
type(1) == int
type(qingjiao) == HunXue # 只能判断一个
'''
二.属性调用过程
我们来思考一个问题:
简单来说就是:当我们去调用属性,或者方法时,它会自动去调用底层的代码,我们可以自行修改底层代码,来达到我们想要的结果
代码如下:
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def __getattr__(self, item): # item规范写,不是规定
print(f'{item}属性不存在!') # 重写底层代码,提供信息
三.魔法方法
魔法方法: 写法: __特定英文__ 调用时机特定
我们再来思考一个问题:
讲到__new__就不得不将单例模式(单个实例)
__new__ 创建实例
class Person:
def __init__(self,name,age):
print('初始化对象')
self.name = name
self.age = age
单例模式: 始终只有一个实例
def __new__(cls, *args, **kwargs): # cls表示类本身
if not hasattr(cls,'_instance'): # 当类不存在_instance属性时(刚开始没有实例) 就创建实例
cls._instance = super().__new__(cls)
return cls._instance
print('创建了实例')
qj = super().__new__(cls) # 继续创建实例
return qj
其他的魔法方法:
__str__ __repr__ __call__
class Person:
def __init__(self,name,age):
print('初始化对象')
self.name = name
self.age = age
def __str__(self):
return 'this is str!' # print()打印实例的时候输出
def __repr__(self):
return 'whis is repr!' # 交互模式下直接输出
def __call__(self): # 可以让实例化对象被调用 qingjiao()
print('我被调用了!')
四.协议
1.序列协议
# 序列协议
# class IndexTuple:
# def __init__(self,*args):
# self.values = tuple([i for i in args]) # 获取值
# self.index = tuple(enumerate(self.values)) # 添加下标(枚举法)
#
# def __len__(self):
# return len(self.values) # 调用底层的len()方法
#
# def __getitem__(self,key):
# # return self.values[key] # 方法一
# return self.index[key][1]
#
# def __str__(self):
# return str(self.values)
#
# def __repr__(self):
# return str(self.values)
2.迭代器协议
# 迭代器协议
# class Number:
# def __init__(self,end=10):
# self.start = 0
# self.end = end
#
# def __iter__(self):
# return self # 在实例化对象之后,将实例变成可迭代对象
#
# def __next__(self): # 让可迭代对象变成迭代器
# if self.start >= start.end:
# raise StopIteration # 手动抛出异常,终止迭代
# num = self.start
# self.start += 1
# return num
3.上下文协议
# 上下文协议 搭配with关键字使用
import time
class RunTime:
def __enter__(self): # 当碰到with关键字时运行
self.start_time = time.time()
def __exit__(self, exc_type, exc_val, exc_tb): #当with关键字里面的代码运行完之后运行
# exc_type: 异常类型
# exc_val:异常值
# exc_tb:追踪信息
self.end_time = time.time()
self.run_time = self.end_time - self.start_time
print(self.run_time)
with RunTime():
for i in range(10000):
pass
五.作业
六.上次的作业答案(仅供参考,并非标准答案)
dic = {}
from decimal import Decimal
class Account:
def __init__(self,user,password,money=0):
self.user = user
self.password = password
self.money = money
def deposit(self,money):
if money >=0:
self.money = Decimal(str(self.money))+Decimal(str(money))
print(f'成功存入{money},此时余额为{self.money}')
def withdraw(self,password,money):
if money>=0 and money<=self.money and password == self.password:
self.money = Decimal(str(self.money))-Decimal(str(money))
print(f'成功取款{money}元,余额还剩{self.money}')
def query(self,password):
if password == self.password:
print(f'余额为{self.money}')
def close(self,user,password):
if user == self.user and password == self.password:
if self.money > 0:
print(f'你的账户还有余额{self.money},请取走之后再来销户。')
elif self.money == 0:
self.user = None
self.password = None
print('你的账户已注销')
def login(user,password):
a = Account(user,password)
while True:
number2 = input('请选择你要进行的操作:1、存款 2、取款 3、查询余额 4、销户 5、退出')
if number2 == '1':
money = float(input('请输入你要存入的金额:'))
a.deposit(money)
elif number2 == '2':
money = float(input('请输入你要取出的金额:'))
a.withdraw(password,money)
elif number2 == '3':
a.query(password)
elif number2 == '4':
a.close(user,password)
elif number2 == '5':
print('退出成功')
break
print('-'*20,'欢迎来到银行','-'*20)
while True:
number = input('请输入你的操作:1.开户 2.登录 3.退出')
if number == '1':
user_name1 = input('请输入你的用户名:')
pwd1 = input('请输入你的密码:')
pwd2 = input('请确认你的密码:')
while pwd1 != pwd2:
print('两次输入的密码不一样,请重新输入')
pwd1 = input('请输入你的密码:')
pwd2 = input('请确认你的密码:')
else:
dic[user_name1] = pwd2
print('开户成功')
elif number == '2':
login_user = input('请输入你的用户名:')
login_pwd = input('请输入你的密码:')
while dic[login_user] != login_pwd:
print('你输入的用户名或者密码不正确,请重新输入。')
login_user = input('请输入你的用户名:') #
login_pwd = input('请输入你的密码:') #
else:
print('登录成功')
login(login_user,login_pwd)
elif number == '3':
print('欢迎下次光临!')
break
七.结语
我们Python基础内容讲解即将结束,大家记得多多关注之后的文章,码字不易求三连.