python基础篇(五)
2018-11-30 本文已影响7人
会飞的小马
-
类
class Foods() 根据约定,在Python中,首字母大写的名称指的是类。
下面是个简单的示例:
方法:类中的函数称为方法
Foods():()为空的时候,表示从空白创建类
__ init __ 具有初始化的功能,注意是 两边两个下划线_
self,必须位于最前面,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法,每个与类相关联的方法调用都自动传递实参self。
class Foods():
def __init__(self,name,flavor):
self.name=name #相当于给变量赋一个默认值
self.flavor=flavor
self.material='鸡肉'
self.seasoning='辣椒'
def chicken(self):
print(self.name+"这个菜的主食材是"+self.material)
def pepper(self):
print("这个菜味道是"+self.flavor+",所以要加些"+self.Seasoning)
my_food = Foods('爆炒鸡丁','重辣')
my_food.Seasoning='朝天椒'#改变一个属性的值,那么调用方法时他会去利用新值
my_food.chicken()
my_food.pepper()
输出
爆炒鸡丁这个菜的主食材是鸡肉
这个菜味道是重辣,所以要加些朝天椒
还可以调用方法来修改属性,如下
class Foods():
def __init__(self,name,flavor):
self.name=name
self.flavor=flavor
self.material='鸡肉'
self.seasoning='辣椒'
def chicken(self):
print(self.name+"这个菜的主食材是"+self.material)
def pepper(self):
print("这个菜味道是"+self.flavor+",所以要加些"+self.seasoning)
def update_pepper(self,u_seasoning):#定义一个修改的方法
self.seasoning=u_seasoning
my_food = Foods('爆炒鸡丁','重辣')
my_food.update_pepper('干辣椒和小辣椒')#调用修改的方法
my_food.chicken()
my_food.pepper()
输出
爆炒鸡丁这个菜的主食材是鸡肉
这个菜味道是重辣,所以要加些干辣椒和小辣椒
还有这样一种方法给属性进行递增或者增加
class Foods():
def __init__(self,name,flavor):
self.name=name
self.flavor=flavor
self.material='鸡肉'
self.seasoning='辣椒'
def chicken(self):
print(self.name+"这个菜的主食材是"+self.material)
def pepper(self):
print("这个菜味道是"+self.flavor+",所以要加些"+self.seasoning)
def update_pepper(self,u_seasoning):
self.seasoning= u_seasoning
def insert_seasoning(self,i_seasoning):#定义一个方法给seasoning增加新的属性
self.seasoning+=i_seasoning
my_food = Foods('爆炒鸡丁','重辣')
my_food.update_pepper('干辣椒')
my_food.pepper()
my_food.insert_seasoning('、生姜')
my_food.pepper()
输出
这个菜味道是重辣,所以要加些干辣椒
这个菜味道是重辣,所以要加些干辣椒、生姜
-
类的继承
被继承的称 父类,新的类称 子类,子类完全继承父类的方法与属性
class Foods():
def __init__(self,name,flavor):
self.name=name
self.flavor=flavor
self.seasoning='辣椒'
def material_1(self):
print(self.name+"这个菜的主食材是"+self.material)
def pepper(self):
print("这个菜味道是"+self.flavor+",所以要加些"+self.seasoning)
def update_pepper(self,u_seasoning):
self.seasoning=u_seasoning
def insert_seasoning(self,i_seasoning):
self.seasoning+=i_seasoning
class Pizza(Foods): #
def __init__(self,name,flavor):#初始化父类中的值
self.material='面粉'#原来的值会带过来,也可以重新定义,但是在这里定义的不再属于父类
#同时如果这里定义的和同名的方法,那么调用时只会关注子类的方法
super().__init__(name,flavor)
my_p= Pizza('牛肉披萨','微辣')
my_p.material_1()
输出
牛肉披萨这个菜的主食材是面粉
-
导入类
导入单个类 from module_name import class_name
导入多个类 from module_name import class_name1,class_name2
导入整个模块 import module_name
导入模块中所有类 from module_name import * -
文件路径
默认读取模块所保存的文件路径,也可以自定义
bbb='D:\\app\ABS.txt'#把文件路径保存在变量中
with open(bbb) as abc:
acc=abc.read()
print(acc)
下面例子可以进行逐行读取,方便在文件中查找指定值
bbb='D:\\app\ABS.txt'
with open(bbb) as abc:
for a in abc:
print(a)
利用文本的读取的数据:
bbb='D:\\app\ABS.txt'
with open(bbb) as abc:
a_1=abc.readlines()
as_a=''
for a in a_1:
as_a+=a.rstrip()
print(as_a)
print(len(as_a))#如果不是用变量as_a,而是直接len(a.rstrip()),那么统计将是每一行的字符串数量
-
文件读取
可指定读取模式 ('r' )、写入模式 ('w' )、附加模式 ('a' )或让你能够读取和写入文件的模式('r+' )。如果你省略了模式实参,Python将以默认的只读模式打开文件。写入模式 ('w' )会覆盖前面的内容而附加模式 ('a' )不会覆盖之前的数据
例如
bbb='D:\\app\ABS.txt'
with open(bbb,'w') as abc:
abc.write("写入数据\n")#\n可在插入时换行
abc.write("再次写入数据\n")
-
存储和读取数据
以下代码演示了如果存储值,以及读取,并且利用了 try + except 对异常信息进行处理
(当程序出现异常,但是我们不想返回任何值时直接在except异常后面加pass)
import json #调用json模块
def get_name():
f_name='username.json'
try:
with open(f_name)as q_name:
username_s=json.load(q_name)#打开我们的存储的文件
except FileNotFoundError:
return None#若果不存在该文件
else:
return username_s#存在该文件,我们就返回里卖弄存储的值
def st_name():
username=get_name()#调用函数若果之前保存过,那么我们就能得到存储的值
if username:
print(username+",欢迎回来!")
else:
username=input("请输入用户名 ")#若果没有获取到值,那么运行下面代码,让用户存储一个值,并保存
f_name='username.json'
with open(f_name,'w')as q_name:
json.dump(username,q_name)
print("注册成功,欢迎您"+username+"!")
st_name()#第一次运行时,没有保存值那么就会提示输入,第二次运行时,已经保存那么直接读取数据