周总结4

这周主要是讲了python 的类方法与对象方法,对象方法第一个传入的一定是对象self自己;类方法@classmethod不需要实例化,第一个传入的参数是类本身cls;静态方法@staticmethod使函数独立于类而存在,不用加self和cls与类和对象无关,一般用于添加系统时间。
类魔术方法:讲到了__del__,new,hasattr,str,eq,类魔术方法不会主动调用,当数据不在使用时会自动触发垃圾回收。
设计模式:单例、观察者、策略、工厂模式,这里对自己的要求是能对这些模式各能写出一个实例,现在是能写,但觉得对这四个模式理解并不透彻,不能做到活学活用,工厂模式定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行;观察者模式对象之间存在某种依赖关系,当一个对象的状态发生改变的时候,所有依赖它的对象都得到通知并作出相应的反应;策略模式用于多选择,但同时又要考虑其他因素;单例模式类中始终只有一个对象,用于对象被公用的时候使用。
单例模式:

class Name(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(Name,"jack"):
            cls.jack = object.__new__(cls)
        return cls.jack
    def __init__(self,name):
        self.name = name
    def say(self):
        print(self.name)
a = Name("kk")
b = Name("jjj")
print(a is b)
print(a == b)
a.say()

工厂模式:
class BWM:
    def __init__(self,name):
        self.name = name
    def say(self):
        print("宝马宾利",self.name)

class GM:
    def __init__(self,name):
        self.name = name
    def say(self):
        print("通用别克",self.name)


class Factory:
    @staticmethod
    def produce(name):
        if name == "奔驰":
            return Benz(name).say()
        elif name == "宝马":
            return BWM(name).say()
        elif name == "通用":
            return GM(name).say()

car1 = Factory().produce("宝马")

观察者模式:

class Boss:
    def __init__(self):
        self.observers = []
        self.state = ''
    def join(self,observe):
        self.observers.append(observe)
    def information(self):
        for i in self.observers:
            i.update()

class Staff:
    def __init__(self,name,boss):
        self.name = name
        self.boss = boss
    def update(self):
        print("%s,%s,please do not play game during office hours"%(self.name,self.boss.state))

pony = Boss()
a1 = Staff("Alin",pony)
pony.join(a1)
pony.state = "BOSS is coming"
pony.information()

策略模式:

class AliPay:
    def __init__(self,full,reduct):
        self.full = full
        self.reduct = reduct

    def register(self,money):
        return money - money/self.full*self.reduct

class Cashier():
    def __init__(self,strategy):
        self.strategy = strategy
    def count(self,money):
        return self.strategy.register(money)


a ={}
a[1] = Cashier(Cash())
a[2] = Cashier(UnionPay(0.95))
a[3] = Cashier(AliPay(300,30))
strategy = int(input("请输入支付策略:"))
money = float(input("请输入商品金额:"))
if strategy in a.keys():
    pay = a[strategy].count(money)
else:
    pay = a[1].count(money)
print(pay)

还有多重继承问题,主要有深度继承和广度继承,继承两层为深度继承,两层以上为广度继承。
简单介绍了抽象类和抽象方法,用于未实现的类和方法,from abc import ABC,abstractclassmethod,abstractmethod,abstractstaticmethod
方法属性化,用于限制属性,在一个类中@property,@??.setter,或者@??.delter连用,property,setter下函数名一致,但是property下的函数一般只是返回修正后的参数值,要注意的是,要返回的参数一定要前缀“_”,并且先修正,后输出
讲了异常问题,有抛出异常,主动生成异常,异常检测只要检测到一个异常就退出检测执行except之后的语句,异常这里有个重点,就是try…except…else…finally…连用要注意的问题,finally不管是否检测到异常都会执行。
讲了模块和包的导入,以及安装生成包。一个模块就是一个py文件,一个包就是package,里面有多个模块文件,和一个init文件。模块和包的导入方式有多种,可以部分导入,也可以全部导入,导入模块的时候,会将模块内可以执行的内容执行一遍,而包只能导入init中__all__指定的所有文件,当init中没有__all__时,引用*只会使用init中的内容,否则只使用__all__中的函数,另外导入的模块不是主函数,导入的模块在sys.path目录中,目录是directory。安装发布包流程不是很熟,抄一遍加深印象。
先建立一个文件夹,文件夹下建立一个模块,在建立一个step.py文件

from distutils.core import step
step(name = “…”
version =”…”
description = “…”
author = “…”
author_email =“…”
py_moudles = [“X.py”,”xx.py”] #这个最重要,加入要导入的模块名 
)

然后命令提示符cmd,进入所在的文件夹,python step.py build,这时文件夹会出现dist ,继续进入文件夹,python step.py sdist,打包完成,将压缩包解压到当前文件,还是进入文件夹,\dist\解压后的文件包->python step.py install,这时包安装完成。
随后提了文件操作,基本格式为

a = open("E:\\dz.txt",'r',encoding='UTF-8')
x = a.read()
print(x)

除了read,还有readline,readlines,write,append等操作,要注意的是,一定是双斜杠“\”,防止转义字符,并且如果不想打E:,只打文件名,那么该文件一定要在该py文件一个文件夹内。
在read下,如果文件没有用’enter’换行,运行后将一行打印出来
readline只读一行,会将转移字符”\n”表示出来
readlines全部读完,会将转义字符打印出来,形式列表
write 更改文件内容,有就覆盖,没有就新建
append 在文件里后加内容,有就增加,没有就新建
read,readline,readlines可以限定读取的个数,下次再读可以从后面继续读。
a.tell(),返回指针当前位置。a.seek(offset,whence):offset偏移量,whence决定从哪里偏移:0开头,1当前,2尾部
这是e盘中的一个dz的txt文件的内容:
“大众汽车(德语:Volkswagen)是一家总部位于德国沃尔夫斯堡的汽车制造公司,也是世界四大汽车
生产商之一的大众集团的核心企业。2016年位居《财富》世界500强第7位。”
下面针对这个文件进行处理操作:

import os
a = open("E:\\dz.txt",'r',encoding='utf-8')
b = a.read(4) # -大众汽 12
print(b,a.tell())
c = a.read(5)
print(c,a.tell()) # 车(德语: 27
a.seek(0,1)# utf-8只能从0开始,并且一个字占用3个字节
d = a.read(4)
print(d) # Volk
path = os.getcwd() # 获取当前文件目录
print(path) # D:\Users\Administrator\PycharmProjects\3\3月25日
os.mkdir('D:\\Users\\Administrator\\PycharmProjects\\3\\3月25日\\shabby',0x777) # 0x777固定格式,创建一个目录
e = os.path.exists("shabby") # 判断当前路径是否存在shabby目录,也可以判断某个目录是否存在
print(e) # True
f = os.path.join(path,'a\\b') # 目录粘接,这个目录不一定真实存在
print(f) # D:\Users\Administrator\PycharmProjects\3\3月25日\a\b

后面有个time函数,和一个飞机大战,飞机大战重在一个面向对象编程的思想,对象文件相互调用,大大压缩了代码量,time函数下周再进行总结。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值