目录


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)类的内置函数的更多相关文章

  1. python之路:进阶篇 内置函数

     li = [11, 22, 33] news = map(  li = [100, 2200, 3300] news = map(  [13, 24, 35] [11, 11, 11] [22, 4 ...

  2. python基础(14)-反射&类的内置函数

    反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类 ...

  3. python面向对象的多态-类相关内置函数-类内置魔法函数-迭代器协议-上下文管理-04

    多态 一种事物具备不同的形态 例如:水 --> 固态.液态.气态 多态:# 多个不同对象可以相应同一个对象,产生不同的结果 首先强调,多态不是一种特殊的语法,而是一种状态,特性(多个不同对象可以 ...

  4. Python基础(10)_内置函数、匿名函数、递归

    一.内置函数 1.数学运算类 abs:求数值的绝对值 divmod:返回两个数值的商和余数,可用于计算页面数 >>> divmod(5,2) (2, 1) max:返回可迭代对象中的 ...

  5. python之路----面向对象中的内置函数

    property属性 什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法 ...

  6. Python中字符串String的基本内置函数与过滤字符模块函数的基本用法

    Python中字符串String的基本内置函数与用法 首先我们要明白在python中当字符编码为:UTF-8时,中文在字符串中的占位为3个字节,其余字符为一个字节 下面就直接介绍几种python中字符 ...

  7. python基础语法18 类的内置方法(魔法方法),单例模式

    类的内置方法(魔法方法): 凡是在类内部定义,以__开头__结尾的方法,都是类的内置方法,也称之为魔法方法. 类的内置方法,会在某种条件满足下自动触发. 内置方法如下: __new__: 在__ini ...

  8. python基础7之python3的内置函数

    官方介绍: python3:https://docs.python.org/3/library/functions.html?highlight=built#ascii python2:https:/ ...

  9. python语言(四)关键字参数、内置函数、导入第三方模块、OS模块、时间模块

    一.可变参数 定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以).此时,可用包裹(packing)位置参数(*args),或者包裹关键字参数(**kwargs),来进行参数传递,会 ...

  10. Python学习日记(六)——内置函数和文件操作(lambda)

    lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 == 1: name = 'prime' else: name = 'c ...

随机推荐

  1. [idea] SpringBoot整合swagger2实现CRUD

    一:创建SpringBoot ,在pom.xml文件中加入jar包 <dependency> <groupId>io.springfox</groupId> < ...

  2. Anaconda在Windows上安装不上原因

    倒腾了一下午安装Anaconda,[所有程序]中只有一个Anaconda的目录,目录中只有一个anaconda prompt,最后发现是因为环境中原先就安装了Java环境,将之前安装的java环境卸载 ...

  3. 多租户通用权限设计(基于casbin)

    多租户通用权限设计(基于 casbin) 所谓权限控制, 概念并不复杂, 就是确认某个操作是否能做, 本质上仅仅就是个bool判断. 权限几乎是每个系统必不可少的功能, 和具体业务结合之后, 在系统中 ...

  4. C++11のlambd表达式

    在其他语言中,我们常见lambda表达式,c++11中也引入了. 利用Lambda表达式,可以方便的定义和创建匿名函数.今天,我们就来简单介绍一下C++中Lambda表达式的简单使用. 一.lambd ...

  5. python开发之路-LuffyCity

    阅读目录 一.python基础语法 二.python基础之字符编码 三.python基础之文件操作 四.python基础小练习 五.python之函数基础 六.python之函数对象.函数嵌套.名称空 ...

  6. windows10 uwp获取设备当前地理位置(经纬度)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. Python函数的装饰器修复技术(@wraps)

    @wraps 函数的装饰器修复技术,可使被装饰的函数在增加了新功能的前提下,不改变原函数名称,还继续使用原函数的注释内容: 方便了上下文环境中不去更改原来使用的函数地方的函数名: 使用方法: from ...

  8. VMware安装CentOS7.5

    虚拟机配置: 选择安装方式: 第一行:安装CentOS 7: 第二行:测试这个媒体并安装CentOS 7: 第三行:故障排除: Tips:CentOS 7与CentOS 6网卡名称命名方式有所改变,如 ...

  9. Dom 动态添加元素节点总结

    jQuery创建元素节点的方法: 创建元素节点: $("<div></div>"): 创建文本节点: $("<div>直接将文本的内容 ...

  10. ABP之Caching

    简介 ABP提供缓存抽象,默认使用MemoryCache.但是可以替换成其他缓存程序,比如 Abp.RedisCache 是使用Redis实现缓存. ICacheManager 缓存的主要接口是ICa ...