python学习笔记-Day8 下 (特殊方法、iter方法、super方法、有序字典实现、python单例模式)

使用特殊方法实现字典

# 使用像字典 dic[‘xx‘] 带中括号的类使用

# 简要介绍
class Foo:
    # ① 对象[xx]  调用的方法
    def __getitem__(self, item):
        return ‘getitem‘

    # ② 对象[xx] = xxx  调用的方法
    def __setitem__(self, key, value):
        return ‘setitem‘

    # ③ del 对象[xx]   调用的方法
    def __delitem__(self, key):
        return ‘delitem‘

obj = Foo()
# ①
ret = obj[‘test‘]

# ②
obj[‘k1‘] = 111

# ③
del obj[‘k1‘]

#例
class Foo:
    def __getitem__(self, item):
        # print(type(item),item)
        # item.start   item.stop  item.step
        print(type(item))
        return 123

    def __setitem__(self, key, value):
        # key.start   key.stop  key.step
        print(type(key),type(value))

    def __delitem__(self, key):
        # key.start   key.stop  key.step
        print(type(key))

obj = Foo()
# 传入分片、步长 ,它将是一个slice对象
ret = obj[1:4:2]
print(ret)

iter方法

# iter 方法

class Foo:
    def __iter__(self):
        yield 1
        yield 2
obj = Foo()
# 当对象遇到被迭代时(循环),将访问__iter__方法
for item in obj:
    print(item)

super方法

# super方法:主动执行父类方法
class C1:
    def f1(self):
        print(‘c1.f1‘)
        return 123

class C2(C1):
    def f1(self):
        # 主动执行父类的f1方法
        ret = super(C2, self).f1()
        print(‘c2.f1‘)
        return ret

obj = C2()
obj.f1()

有序字典实现

# 有序的字典实现(基于dict类)

class MyDict(dict):
    def __init__(self):
        # 列表是有序的,定义一个空列表接受key值
        self.li=[]
        # 主动执行父类的__init__方法
        super(MyDict, self).__init__()

    def __setitem__(self, key, value):
        # 当我们去执行 dic[‘k1‘] = 123,会调用__setitem__方法
        # 在调用dict类之前,我们将key加入到列表
        self.li.append(key)
        # 主动执行父类的__setitem__方法
        super(MyDict, self).__setitem__(key,value)

    def __str__(self):
        # 定义一个
        temp_list = []
        for key in self.li:
            value = self.get(key)
            temp_list.append("‘%s‘:%s" % (key,value))
        temp_list = ‘{‘+‘,‘.join(temp_list)+‘}‘
        return temp_list

obj = MyDict()
obj[‘k1‘] = 123
obj[‘k2‘] = 456
print(obj)

==》 {‘k1‘:123,‘k2‘:456} 

python单例模式

# python的单例模式
# 1. 使用类方法实现
# 2. 使用静态字段实现

class Foo:
    instance = None

    def __init__(self,name):
        self.name = name

    @classmethod
    def get_instance(cls):
        # cls类名
        if cls.instance:  # 如果静态字段instance 为真
            return cls.instance
        else:
            obj = cls(‘alex‘)
            cls.instance = obj #
            return obj

obj1 = Foo.get_instance()
print(obj1)   # 在这里,类的静态字段instance值已经被该变
obj2 = Foo.get_instance()
print(obj2)
# obj1与obj2 内存地址相同
时间: 2024-10-03 22:32:55

python学习笔记-Day8 下 (特殊方法、iter方法、super方法、有序字典实现、python单例模式)的相关文章

python学习笔记-Day8 上(pickle补充、字段、面向对象成员、成员修饰符、特殊方法)

pickle 序列化补充 # pickle load # 现在有两个python程序,调用关系如下 # s1.py class foo: …. Obj = foo(x,y) Pickle.dump(obj, open(‘db’,’wb’)) S2.py # s2.py from s1 import foo pickle.load(db) # s2.py 反序列化加载包含对象,一定要先导入对象对应的类,否则Pickle load将会报错 类多继承关系 有共同父类的继承关系如下 如图,如果我们有两个

PYTHON学习笔记-DAY-8

Python之路,Day8 - Socket网络编程 本节内容 Socket介绍 Socket参数介绍 基本Socket实例 Socket实现多连接处理 通过Socket实现简单SSH 通过Socket实现文件传送 作业:开发一个支持多用户在线的FTP程序 1. Socket介绍 概念 A network socket is an endpoint of a connection across a computer network. Today, most communication betwe

Python学习笔记——1、环境搭建篇(如何在Pycharm中配置Python和Django)

1.准备好以下东东,并且按照先后顺序进行安装: Python 3.6 (64-bit) Django-1.11.tar.gz pycharm-community-2016.3.2.exe 安装好了以后在cmd运行: python --version python -m django --version 确认是否安装完成 2.在D盘建立文件夹:D:\python_workspace\helloworld,在pycharm中在这个位置新建一名为helloworld的工程 3.在cmd中进入到D:\p

Python 学习笔记 - SQLAlchemy(下)

继续上一篇SQLAlchemy的学习之旅. 多对多表的创建 表Host和表HostUser通过表HostToHostUser关联在一起 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index,Table

python学习笔记day8【socket网络编程】

内容大纲 1.socke基础 两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建 立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP(或者UDP)的封装,TCP/IP也要提供可供程序员做网络 开发所用的接口,这就是Socket编程接口:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力. Socket的英文原义是“孔”或“插座”.作为BSD UNIX的进程通信机制,取后

python学习笔记3:基础(元组、字符串、列表、字典)

参考文档:http://www.cnblogs.com/liu-yao/p/5145876.html 一,对象与类 对象: python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,玩的手机就是对象. 我们通过描述属性(特征)和行为来描述一个对象的. 在python中,一个对象的特征也称为属性(attribute).它所具有的行为也称为方法(method) 结论:对象=属性+方法 在python中,把具有相同属性和方法的对象归为一个类(class) 比如人类,动物,植物等等,

Python学习笔记基础篇——总览

Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列表.字典.主文件判断.对象 Python学习笔记——基础篇1[第三周]——set集合 Python学习笔记——基础篇2[第三周]——计数器.有序字典.元组.单(双)向队列.深浅拷贝.函数.装饰器 Python学习笔记——基础篇[第四周]——迭代器&生成器.装饰器.递归.算法.正则表达式 Python

Python学习笔记010——匿名函数lambda

1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要return来返回值,表达式本身结果就是返回值. lambda 仅简洁了代码,并不会提高程序运行效率 如果可以用 for...in...if 来完成的,最好不使用匿名函数lambda 使用lambda时,函数内不要包含循环.嵌套:如果存在,则最好使用def函数来完成,这样的代码可读性和复用性均较高 l

python 学习笔记 3 -- 数据结构篇下

5.引用 当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存.这被称作名称到对象的绑定.eg. [python] view plaincopy # -*- coding: utf-8 -*- shoplist = ['apple', 'mango', 'carrot', 'banana'] print "we copy the shoplist to mylist directly \"with