首页 > 编程语言 > python 魔法函数学习

python 魔法函数学习

时间:2023-02-14 22:02:14浏览次数:36  
标签:__ obj 函数 python self 魔法 key print def

1.什么是魔法函数

    以__开始和结束,不需要专门调用,在特定场合下,python会自己调用,如__init__, __str__等

2.常用的魔法函数

    __str__: 返回类对象友好的提示,例子

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

def __str__(self):
return self.name

obj = Test(name="Hello, World")
print(obj)

    __len__:计算对象容器中元素的个数      # 应用场景???,将类当容器处理

class TestLen:
def __init__(self, mylist):
self.mylist = mylist

def __len__(self):
return len(self.mylist)

obj = TestLen([1,2,3,4])
print(len(obj)) # 去掉__len__, 则报错

__setitem__(新建字典),__getitem__(通过key获取value),__delitem__(删除key对应的value),应用场景,将类当字典处理  

class TestDict:
def __init__(self):
self.dict = {}

# 新建字典
def __setitem__(self, key, value):
self.dict[key] = value

# 通过字典key获取value
def __getitem__(self, item):
return self.dict[item]

# 删除对应key的记录
def __delitem__(self, key):
del self.dict[key]

obj = TestDict()
obj.dict["name"] = "hyh" # 调用__setitem__
obj["age"] = 18 # 效果同上
print(obj.dict)
print(obj["name"]) # 调用__getitem__
del obj["age"] # 调用__delitem__
print(obj.dict)

__iter__,__next__:迭代器 ,将类对象当作可迭代对象

class TestIterator:
def __init__(self, value):
self.start = 0
self.end = value

def __iter__(self):
return self

def __next__(self):
if self.start < self.end:
self.start += 1
return self.start
else:
raise StopIteration

obj = TestIterator(5)
# 可遍历
for i in obj:
print(i)

# 使用next函数遍历
#print(next(obj))
#print(next(obj))

 __enter__,__exit__:实现with上下文管理  

class TestWith:
def __init__(self, filename, mode="r", encoding="utf-8"):
self.filename = filename
self.__file = open(filename, mode, encoding=encoding)

def __enter__(self):
print("enter")
return self

def write(self, content):
print("write")
self.__file.write(content)

def __exit__(self, exc_type, exc_val, exc_tb):
print("exit")
self.__file.close()

with TestWith(r"E:\python_apps\bk-pipline\haoyong_test\hyh.txt", mode="w", encoding="utf-8") as f:
f.write("nihao\n hello world")

实现数据库连接释放


标签:__,obj,函数,python,self,魔法,key,print,def
From: https://blog.51cto.com/haoyonghui/6057436

相关文章

  • 2023年第 3 期《Python 测试平台开发》进阶课程(3月5号开学)
    2023年第3期《Python测试平台开发》进阶课程主讲老师:上海-悠悠上课方式:微信群视频在线教学,方便交流本期上课时间:3月5报名费:报名费3800一人(周期3个月,之前学过《pytho......
  • VUE简介/插值/属性/文本/函数指令/if/for操作
    VUE简介/插值/属性/文本/函数指令前端发展史1.前后端一体的,HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板......
  • python File(方法)
    open()方法:Pythonopen()方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出OSErroropen(file,mode='r',buffer......
  • sql语气查询去重的两种方法、sql的模糊查询、sql中的日期函数、mysql字符串截取之subs
    sql语气查询去重的两种方法以下两种都可以进行去重查询,区别是:用distinct去重,只能查询到去重的属性那一列,无法查询其他字段用groupby分组查询,可以根据需求查询对应的其......
  • Python
    PythonSyntaxfrom...import...as...import的后面内容对本模块可见package1.package2.module.name只要import涉及到package,该package下的__init__.py会被自动......
  • 10.8函数内部的处理
         ebp寄存器的值在(1)中人栈,在(5)中出栈。这主要是为了把函数中用到的ebp寄存器的内容,恢复到函数调用前的状态。在进入函数处理之前,无法确定ebp寄存器用......
  • 10.7函数调用机制
          代码清单10-1中列出的C语言源代码中,有一个处理是在变量c中存储AddNum函数的返回值,不过在汇编语言的源代码中,并没有与此对应的处理。这是因为编译器有......
  • Python 使用mysql.connector、pymysql和 MYSQLdb(MysqlClient)操作MySQL数据库
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一。本文主要介绍安装mysql.connector,、pymysql......
  • python基础学习的第三天
    一、pycharm软件的基本使用安装pycharm语言使用英文版本基本使用1.修改主题背景![](https://img2023.cnblogs.com/blog/3095768/202302/3095768-20230214173111510......
  • 初识Python
                             pycharm软件的基本使用#1.下载与安装#2.pycharm的语言,一定要使用英文的​#修改主题......