python3 重要知识点3

python3 重要知识点3

https://www.bilibili.com/video/BV1NM4y1K73T?p=51&spm_id_from=pageDriver&vd_source=7963e4096d2b51e52877519dc0202e3e
视频教学

1.面向对象: 把相关的数据和方法看成一个整体,关系抽象为类、继承,它将对象作为程序的基本单元,将程序和数据封装在其中,以提高系统的重用性。
2.定义类、定义对象、调用对象

#定义类
class MianShi():   #括号里可以不写object,默认写进去了
    def __init__(self,name,id,age): #用来做变量初始化
        self.name = name
        self.id = id
        self.age = age
    def info(self):
        print("准备简历")
    def learn(self):
        pass
    def aspect(self):
        print("我的姓名是:",self.name)
        print("我的年龄是:",self.age)
#定义对象
soft = MianShi("zhaoyun",1,16)
#使用函数
soft.info() 
soft.aspect()

输出结果为:
准备简历
我的姓名是: zhaoyun
我的年龄是: 16
说明:
新式类为 class 类名(object):
object是所有类的最顶级父类
类名采用大驼峰命名法
info是一个实例方法,第一个参数一般是self,即实例对象本身,当然也可以把self换成其他名字,即表示一个变量,这个变量指向了实例对象。
pass:什么都不做,如果函数里什么都没有,不写pass会报错。
初始化: init(self, 属性),默认有一个参数名字为self,如果传递了2个实参,则为__init__(self,x,y)
注意:
在类内获取属性和方法,通过self获取
在类外获取属性和方法,通过对象名获取
一个类有多个对象,每个对象的属性各自保存,有各自独立的地址
方法是所有对象共享的,只占一份内存,类通过self判断哪个对象调用了方法
3.魔方方法: 魔法方法是自动调用的,只要写上去了,即使不执行也会执行。如果有__xxx__()的,就有特殊功能,称为魔法方法,
str用来输出对象时的展开描述,当使用print输出对象时,默认打印对象的内存地址,如果定义了__str__(self)方法,就会打印这个方法的return的数据,通常返回一个字符串,作为这个对象的描述信息。
init用来初始化对象
del用来删除对象。回收对象的时候会自动调用。

#定义类
class MianShi():   #括号里可以不写object,默认写进去了
    def __init__(self,name,id,age):
        self.name = name
        self.id = id
        self.age = age
    def info(self):
        print("准备简历")
    def learn(self):
        pass
    def aspect(self):
        print("我的姓名是:",self.name)
        print("我的年龄是:",self.age)
    def __str__(self):
        return ("我的姓名是:%s,我的id是:%d,我的年龄是%d" %(self.name,self.id,self.age))
    def __del__(self):
        print(f"{self.name}已经被查看了")
#定义对象
soft = MianShi("zhaoyun",1,16)
#使用函数
soft.info()
soft.aspect()
#打印对象
print(soft) #没有str函数,原本输出:<__main__.MianShi object at 0x00000204A2837740>
#有了__str__后,输出:我的姓名是:zhaoyun,我的id是:1,我的年龄是16
# del soft

输出:
准备简历
我的姓名是: zhaoyun
我的年龄是: 16
我的姓名是:zhaoyun,我的id是:1,我的年龄是16
zhaoyun已经被查看了
4.继承
指多个类之间的所属关系,如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传到类B里,那类A就是基类,也叫父类,类B叫派生类,也叫子类。
一、单继承:

class Master(object):
    def __init__(self):
        self.kongfu = "老派煎饼果子配方"
    def make_cake(self):
        print(f"使用了{self.kongfu},制作了一个煎饼果子")
# shifu = Master()
# shifu.make_cake()
class DaMao(Master):
    pass #占位置的功能
damao = DaMao()
damao.make_cake() #输出:使用了老派煎饼果子配方,制作了一个煎饼果子

子类在继承时,小括号里是父类名字,
子类默认继承父类的__init__方法
父类的属性方法都会被继承
二、多继承:

class Master(object):
    def __init__(self):
        self.kongfu = "老派煎饼果子配方"
    def make_cake(self):
        print(f"使用了{self.kongfu},制作了一个煎饼果子")
    def play_zima(self):
        print(f"使用了芝麻")
# shifu = Master()
# shifu.make_cake()
class School(object):
    def __init__(self):
        self.kongfu = "现代煎饼果子配方"
    def make_cake(self):
        print(f"使用了{self.kongfu},制作了一个煎饼果子")
    def play_shala(self):
        print(f"使用了沙拉")
class DaMao(Master,School): 
    pass #占位置的功能
damao = DaMao()
damao.make_cake() #如果换成class DaMao(School,Master)结果就会输出:使用了现代煎饼果子配方,制作了一个煎饼果子
damao.play_shala()
damao.play_zima()

输出:
使用了老派煎饼果子配方,制作了一个煎饼果子
使用了沙拉
使用了芝麻
原因是:如果继承了两个或以上的类时,
如果多个父类中有同名的属性和方法,默认使用第一个父类的方法。
如果不重名,那都可以使用。
三、子类重写父类的同名属性和方法

class Master(object):
    def __init__(self):
        self.kongfu = "老派煎饼果子配方"
    def make_cake(self):
        print(f"使用了{self.kongfu},制作了一个煎饼果子")
    def play_zima(self):
        print(f"使用了芝麻")
# shifu = Master()
# shifu.make_cake()
class School(object):
    def __init__(self):
        self.kongfu = "现代煎饼果子配方"
    def make_cake(self):
        print(f"使用了{self.kongfu},制作了一个煎饼果子")
    def play_shala(self):
        print(f"使用了沙拉")
class DaMao(Master,School):
    def __init__(self):
        self.kongfu = "猫式煎饼果子配方"
    def make_cake(self):
        print(f"使用了{self.kongfu},制作了一个煎饼果子")
damao = DaMao()
damao.make_cake()
damao.play_shala()
damao.play_zima()

输出:
使用了猫式煎饼果子配方,制作了一个煎饼果子
使用了沙拉
使用了芝麻
分析:如果子类和父类有同名方法和属性时,默认使用子类!
(最优先级肯定是自己,自己没有再找其他)
四、子类调用父类的同名属性和方法

class Master(object):
    def __init__(self):
        self.kongfu = "老派煎饼果子配方"
    def make_cake(self):
        print(f"使用了{self.kongfu},制作了一个煎饼果子")
    def play_zima(self):
        print(f"使用了芝麻")
class School(object):
    def __init__(self):
        self.kongfu = "现代煎饼果子配方"
    def make_cake(self):
        print(f"使用了{self.kongfu},制作了一个煎饼果子")
    def play_shala(self):
        print(f"使用了沙拉")
class DaMao(Master,School):
    def __init__(self):
        self.kongfu = "猫式煎饼果子配方"
    def make_cake(self):  #重写方法
        print(f"使用了{self.kongfu},制作了一个煎饼果子")
    def make_oldcake(self):  #调用老派
        Master.__init__(self)
        self.make_cake()
    def make_moderncake(self):  #调用现代
        School.__init__(self)
        self.make_cake()
damao = DaMao()
damao.make_cake() #调用猫式配方
damao.make_oldcake() #调用老派配方
damao.make_moderncake() #调用现代煎饼配方
damao.make_cake() 

输出结果为:
使用了猫式煎饼果子配方,制作了一个煎饼果子
使用了老派煎饼果子配方,制作了一个煎饼果子
使用了现代煎饼果子配方,制作了一个煎饼果子
使用了现代煎饼果子配方,制作了一个煎饼果子
原因是:调用父类方法,可以通过执行父类的__init__方法修改self的属性,然后调用父类名.方法(self)
注意:无论何时,self都表示子类的对象,在调用父类时,传递self参数,来控制方法和属性的访问修改。
五、super() 可以用来逐一调用所有的父类方法,并且只执行一次,调用顺序也遵循mro类属性的顺序,若继承了多个父类,且父类都有同名方法,默认只执行第一个父类的,不支持执行多个父类的同名方法,通常用于单继承的多层继承

    def make_oldcake(self):  #调用老派
        Master.__init__(self)
        super().make_cake()
damao.make_oldcake() #输出:使用了老派煎饼果子配方,制作了一个煎饼果子    

5.文件作用: 把一些数据存放起来,可以让程序下一次执行的时候直接使用
要习惯按ctrl+s,保存。
6.文件操作:
文件访问模式有:
访问模式

先在pycharm同一目录下创建了一个test.txt文件(右击文件夹–>new–>file–>输入test.txt–>确认),内容为如下:test文件
一个完整的读取文件流程:
打开:f = open(“文件名”,“w”) #(文件名,访问模式)->读取–>写入–>备份

#1打开文件:
#代码和文件在同一目录,可以只写文件名,不在则要加目录。
# 有中文要加encoding="utf-8"
file = open("test.txt","r",encoding="utf-8")
#2读取文件:把硬盘里的文件加载进内存中,
print(file.read()) #读取整个文件

输出:
hhhhhhhhhhhh
有意思

file = open("test.txt","r",encoding="utf-8")
#2读取文件:把硬盘里的文件加载进内存中,
# print(file.read()) #读取整个文件所有的数据

print(file.read(5)) #读取前五个字符,读取数据的长度,单位是字节。
print("分割线")
print(file.read()) #接着上面没读完的继续读取,即读取剩下部分

输出:
hhhhh
分割线
hhhhhhh
有意思

file = open("test.txt","r",encoding="utf-8")
# 当文件足够大的时候,内存不够加载整个文件,选择加载一部分
print(file.readline()) #读取一行
print("分割线")
print(file.readline()) #读取下一行

输出:
hhhhhhhhhhhh
分割线
有意思

file = open("test.txt","r",encoding="utf-8")
print(file.readlines()) #读取每行数据放在列表里

输出:[‘hhhhhhhhhhhh\n’, ‘有意思’]
写入文件方式:

#以写的方式打开文件
file = open("write.txt","w")
#写入数据,
file.write("hello,world")
#关闭文档
file.close() #file内容为:hello,world
#以追加的方式写入文件
file = open("write.txt","a")
#写入数据,
file.write("hello,world\n")#换行是\n,不是/n
#关闭文档
file.close()
#输出:
#hello,world
#hello,world

文件备份:

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值