python之路(10)类的内置函数
目录
- isinstance()和issubclass()
- __setitem__、__getitem__和__delitem__
- __str__和__reper__
- __format__
- __slots__
- __module__和__class__
- __del__
- __call__
- __iter__和__next__
isinstance(obj,cls)和issubclass(sub,super)
isinstance(obj,cls) 检查obj是否是cls的对象
issubclass(sub,super) 检查sub子类是否是super类的子类
__setitem__、__getitem__和__delitem__
class test:
def __getitem__(self, item):
print("getitem")
return getattr(self,item) def __setitem__(self, key, value):
print("setitem")
setattr(self,key,value) #将值加到属性字典中 def __delitem__(self, key):
print("delitem")
delattr(self,key) t1 = test() #赋值
t1['name'] = 'chen' #setitem #取值
t1['name'] #getitem #删除
del t1['name'] #delitem
__str__和__repr__
__str__ 当print()输出实例时调用,类似java里的toString()方法
class test:
def __str__(self):
return "这里是__str__" t1 = test()
print(t1) #这里是__str__
__repr__ 在pathon解释器中,直接打印实例对象触发。如果__str__没有定义时会调用__repr__,如果__str__有定义时会优先调用__str__
class test:
# def __str__(self):
# return "这里是__str__"
def __repr__(self):
return "这里是__repr__" t1 = test()
print(t1) #这里是__repr__
__format__
__format__ 字符串格式化输出 format() 时调用
#自定制格式化输出
format_dict={
'ymd':'{0.year}{0.mon}{0.day}',
'y-m-d':'{0.year}-{0.mon}-{0.day}',
'y:m:d':'{0.year}:{0.mon}:{0.day}'
} class test:
def __init__(self,year,mon,day):
self.year = year
self.mon = mon
self.day = day def __format__(self, format_spec): #format()---->__format__()
if not format_spec:
format_spec = 'ymd'
return format_dict[format_spec].format(self) t1 = test(2018,11,30) print(format(t1)) #20181130
print(format(t1, "y-m-d")) #2018-11-30
print(format(t1, "y:m:d")) #2018:11:30
__stols__
在通过类生成实例对象,每个实例都会生成一个独立的属性字典,为了节省内存空间,定义__stols__方法取代__dict__进行统一管理,作为一个内存优化工具
限制属性的创建,只能创建__stols__提供的属性
class test:
__slots__ = ['name'] t1 = test() #由这个类产生的类不再具有__dict__属性字典
t1.name = 'chen'
print(t1.name) #chen
print(t1.__slots__ ) #['name']
print(t1.__dict__ ) # AttributeError: 'test' object has no attribute '__dict__'
#限制属性的创建
t1.age = 18 #AttributeError: 'test' object has no attribute 'age'
__module__和__class__
__module__ 返回实例的模块
__class__ 返回实例的类
__del__(析构函数)
__del__ 实例对象被删除,系统回收内存时调用
__call__
实例对象加括号这样的形式调用,会执行__call__方法
注:类生成实例对象本质也是调用call方法
class test:
def __call__(self, *args, **kwargs):
print("call方法")
t1 = test()
t1() #call方法
__iter__和__next__
迭代器协议的两个内置方法
class test:
def __init__(self,n):
self.n=n def __iter__(self):
return self def __next__(self):
if self.n == 13:
raise StopIteration('终止了') #迭代器抛出异常停止迭代
self.n += 1
return self.n t1 = test(10)
#for循环会捕捉StopIteration异常,停止循环
for i in t1: #f1.__iter__
print(i)
python之路(10)类的内置函数的更多相关文章
- python之路:进阶篇 内置函数
li = [11, 22, 33] news = map( li = [100, 2200, 3300] news = map( [13, 24, 35] [11, 11, 11] [22, 4 ...
- python基础(14)-反射&类的内置函数
反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类 ...
- python面向对象的多态-类相关内置函数-类内置魔法函数-迭代器协议-上下文管理-04
多态 一种事物具备不同的形态 例如:水 --> 固态.液态.气态 多态:# 多个不同对象可以相应同一个对象,产生不同的结果 首先强调,多态不是一种特殊的语法,而是一种状态,特性(多个不同对象可以 ...
- Python基础(10)_内置函数、匿名函数、递归
一.内置函数 1.数学运算类 abs:求数值的绝对值 divmod:返回两个数值的商和余数,可用于计算页面数 >>> divmod(5,2) (2, 1) max:返回可迭代对象中的 ...
- python之路----面向对象中的内置函数
property属性 什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法 ...
- Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
Python中字符串String的基本内置函数与用法 首先我们要明白在python中当字符编码为:UTF-8时,中文在字符串中的占位为3个字节,其余字符为一个字节 下面就直接介绍几种python中字符 ...
- python基础语法18 类的内置方法(魔法方法),单例模式
类的内置方法(魔法方法): 凡是在类内部定义,以__开头__结尾的方法,都是类的内置方法,也称之为魔法方法. 类的内置方法,会在某种条件满足下自动触发. 内置方法如下: __new__: 在__ini ...
- python基础7之python3的内置函数
官方介绍: python3:https://docs.python.org/3/library/functions.html?highlight=built#ascii python2:https:/ ...
- python语言(四)关键字参数、内置函数、导入第三方模块、OS模块、时间模块
一.可变参数 定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以).此时,可用包裹(packing)位置参数(*args),或者包裹关键字参数(**kwargs),来进行参数传递,会 ...
- Python学习日记(六)——内置函数和文件操作(lambda)
lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 == 1: name = 'prime' else: name = 'c ...
随机推荐
- SQL 修改字段类型和长度,常见类型介绍及数据库设计工具PowerDesigner和astah
1.电话字段设置24个Byte竟然不够,好吧设置为50的长度. alter table <表名> alter column <字段名> 新类型名(长度) 举例: ) 2.删除一 ...
- js 计算金额是否小于总金额,大于是不能保存
计算金额是否小于总金额,大于是不能保存 function kpjejs(oInput){ var result = 0; var vresult = "kpsq_kpzje";// ...
- Visual Studio Code自定义快捷键(eclipse习惯)
左下角设置按钮 -> Keyboard Shortcuts -> keybindings.json. [ { "key": "alt+/", &qu ...
- 基于android的天气预报的设计与实现
目录 应用开发技术及开发平台介绍 应用需求分析 应用功能设计及其描述 应用UI展示 ①开发技术: 本系统是采用面向对象的软件开发方法,基于Android studio开发平台,以Android作为本系 ...
- LeetCode算法题-1-bit and 2-bit Characters(Java实现)
这是悦乐书的第302次更新,第321篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第170题(顺位题号是717).有两个特殊字符,第一个字符可以用一个比特0表示,第二个字 ...
- ubuntu如何安装chromium浏览器并设置成中文版
在Ubuntu上使用APT安装Chromium有3种方法: 1.在Ubuntu软件中心输入chromium,然后在结果中选择安装即可. 2.在新立得软件包管理器中输入chromium,然后标记安装即可 ...
- DNS域名解析过程,域名的认识
DNS域名解析过程 参考知乎:https://www.zhihu.com/question/23042131 当你通过浏览器输入url访问资源时,会请求DNS解析域名成对应的IP地址,由IP地址在去与 ...
- SpringBoot中集成Swagger2
1.依赖jar <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-s ...
- 【js】js中判断对数是否为空
1.将json对象转化为json字符串,再判断该字符串是否为"{}" var data = {}; var b = (JSON.stringify(data) == "{ ...
- Django-4 视图层
视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...