Python全栈开发——面向对象进阶(一切皆对象)

1.isinstance(obj,cls)            检查obj是否是类cls的对象,
issubclass(sub,super)          检查sub是否是super的子类

#isinstance(obj,cls)  检查obj是否是类cls的对象
class Foo:
    pass
f=Foo()
print(isinstance(f,Foo))    #True

#issubclass(sub,super)  检查sub是否是super的子类
class Bar(Foo):
    pass
print(issubclass(Bar,Foo))   #Ture

2.反射(常用于可插拔方式)

3.__setattr__,__getattr__,__delattr__

4.二次加工标准类型(包装)

5.__getattribute__

class Foo:
    def __init__(self,y):
        self.y=y
    #有__getattribute__,则__getattr__不会触发
    #实际上只有触发AttributeError时,才会触发
    def __getattr__(self, item):
        print(‘getattr‘)

    #实例化访问时,不管存不存在属性,都会调用
    def __getattribute__(self, item):
        print(‘getattribute‘)
f=Foo(3)
f.c       #  getattribute
f.y       #  getattribute

6.描述符(__get__,__set__,__delete__)

7.再看property

8.__setitem__,__getitem__,__delitem__

#通过字典形式访问才会触发,和内置attr差不多
class Foo:
    def __getitem__(self, item):
        print(‘getitem‘)

    def __setitem__(self, key, value):
        print(‘setitem‘)
        self.__dict__[key]=value

    def __delitem__(self, key):
        print(‘delitem‘)

f=Foo()
f[‘l‘]=‘k‘    #setitem
print(f.__dict__)  #{‘l‘: ‘k‘}
f[‘l‘]        #getitem
del f[‘ff‘]   #delitem

9.__str__,__repr__,__format__

#__repr__,__str__ 控制对象的显示方式,一定有返回值,且为字符串形式 # print的原理就是输出___str__的信息,若找不到,用__repr__代替
class Foo:
    def __str__(self):
        return ‘str‘

    def __repr__(self):
        return ‘repr‘

x=Foo()
print(x)    #str

#__format__

x=‘{0}-{0}-{0}‘.format(‘d‘)
print(x)   #d-d-d

Date_geshi={
    ‘ymd‘:‘{0.year}-{0.month}-{0.day}‘,
    ‘ydm‘:‘{0.year}-{0.day}-{0.month}‘,
    ‘mdy‘:‘{0.month}-{0.day}-{0.year}‘,
}
class Date:
    def __init__(self,year,month,day):
        self.year=year
        self.month=month
        self.day=day
    #定制格式
    def __format__(self, format_spec=‘ymd‘):
        if format_spec not in Date_geshi:
            print(‘没有该格式‘)
            format_spec = ‘ymd‘
        print(format_spec)   #  ymd
        return Date_geshi[format_spec].format(self)

d=Date(2016,12,23)
d1=d.__format__(‘hgfh‘)
print(d1)    #  2016-12-23
print(format(d,‘mdy‘))   #相当于执行  d.__format__(‘mdy‘)
#  12-23-2016

10.__slots__(如果一个属性很少的类,但是有很多 实例,为了节省内存,可以使用__slots__取代实例的__dict__)

class Foo:
    #设置之后,class没有__dict__属性了
    #也限制了创建,只能定义你定义的属性
    #只能定义__slots__提供的name,age
    __slots__ = [‘name‘,‘age‘]

f=Foo()
f.name=13

11.__doc__(打印类文档)

12.__module__    表示当前操作的对象在哪个模块

__class__           表示当前操作的对像是哪个类

13.__del__析构方法

14__call__对象后面加括号,触发执行

class Foo:
    def __call__(self,*args,**kwargs):
        print(‘__call__‘)

f=Foo()
f()     #__call__

15__next__,__iter__(迭代器协议)

class FBIF:
    def __init__(self,_a,_b):
        self.__a=_a
        self.__b=_b
    def __iter__(self):
        return self
    def __next__(self):
        self.__a,self.__b=self.__b,self.__b+self.__a
        return self.__a
f=FBIF(1,1)
print(next(f))
print(next(f))
print(‘---------------->‘)
for i in f:
    print(i)
    if i>100:
        raise StopIteration(‘ffff‘)

原文地址:https://www.cnblogs.com/lujiacheng-Python/p/9739314.html

时间: 2024-10-05 12:20:23

Python全栈开发——面向对象进阶(一切皆对象)的相关文章

Python全栈开发--面向对象3

面向对象的三大特性: 多态 多态指的是一类事物有多种形态.Python3天生支持多态. 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hello') class Dog(Animal): #动物的形态

python全栈学习--面向对象进阶3

复习: #反射 必须会,必须能看的懂,必须知道在哪儿用 #hasattr  getattr setattr delattr 内置方法 必须能看懂 能用尽量用 __len__len(obj)的结果依赖于obj.__len()__的结果,计算对象的长度 __hash__ hash(obj)的结果依赖于obj.__hash__()的结果,结算对象的hash值 __eq__ obj1 == obj2 的结果依赖于obj.__eq__()的结果,用来判断相等 __str__ str(obj) print(

Python全栈开发——面向对象的三大特性(继承 & 多态 &封装)

1.继承 1.两层意思改变和扩展(详细看随笔继承和组合) 2.多态(体现在运行时的状态) 1.不同的类可以调用相同的方法,得到不同的结果 2.实际上是继承的一种体现机制 class H2o: def __init__(self,name,temperature): self.name=name self.temperature=temperature def turn_ice(self): if self.temperature<0: print('温度太低,变成[%s]' %self.name

Python 全栈开发【第一篇】:目录

Python 全栈开发[第0篇]:目录 第一阶段:Python 开发入门 Python 全栈开发[第一篇]:计算机原理&Linux系统入门 Python 全栈开发[第二篇]:Python基础语法入门 Python 全栈开发[第三篇]:数据类型.字符编码.文件操作 第二阶段:函数编程&常用标准库 Python 全栈开发[第四篇]:函数.递归.生成器.迭代器 Pyhton 全栈开发[第五篇]:常用模块学习 第三阶段:面向对象编程&网络编程基础 Python 全栈开发[第六篇]:面向对象

python全栈开发目录

python全栈开发目录 linux命令 初识python python基础数据类型 函数编程.set.深浅拷贝 内置函数 文件操作 装饰器 迭代器和生成器 常用模块 初识类和对象 类和对象(进阶) 反射 异常处理 socket.IO多路复用 线程.进程.协程 HTML CSS JavaScript DOM文档操作 jQuery实例 web框架本质 Tornado mysql基础 mysql进阶 ..... 基本算法 递归--二分法查找 冒泡排序 更多 线程池

python全栈开发学习目录

python全栈开发学习目录 第一章 计算机基础 第二章Python入门 第三章数据类型 第四章文件操作 第五章函数 第六章 模块 第七章 面向对象 第八章 网络编程 第九章 并发编程 第十章 数据库 第十一章 前端开发-html 第十一章 前端开发-css 附加:js特效 15个小demo 第十一章 前端开发-JavaScript 第十一章 前端开发-jQuery 第十一章 前端开发-bootstrap 第十二章 Django框架开发 ... 原文地址:https://www.cnblogs.

Python全栈开发【基础三】

Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 6 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算 参数:为函数体提供数据 返回值:当函数执行完毕后,可以给调用者返回数据. 总结使用函数的好处: 1.减少代码重用 2.保持一致性,易维护

Python全栈开发【第一篇】:初识Python

Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与while循环练习题 基本数据类型前引 Python 的种类 Cpython Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上. Jyhton Python的Java实现,Jython会将Pyth

Python全栈开发

Python全栈开发 一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大,但是理解起来有些困难,因此我尽量用最简单的例子一步步的说明这个原理. 1.不带参数的装饰器 假设我定义了一个函数f,想要在不改变原来函数定义的情况下,在函数运行前打印出start,函数运行后打印出end,要实现这样一个功能该怎么实现?看下面如何用