这些模块都是在讲OOP时讲到的。

都是类中内置的。

#!/usr/bin/env python
# coding:utf-8 from lib.aa import C c1 = C()
print(c1.name) print(c1.__module__) # 来自哪个模块
print(c1.__class__) # 来自哪个类 class Foo:
'''这里是类的描述信息。。。'''
def __init__(self,name):
self.name = name def __del__(self): # 在程序执行完毕后,内存释放资源回收才会被执行
print('我执行了__del__') def __call__(self, *args, **kwargs): # 对象后面加括号,触发执行。
print('我执行了 __call__') f1 = Foo('abcde') del f1.name # 这个不会触发 __del__ print('=========')
f1()
# Foo('tom')
print(f1.__doc__)

自定义的格式化方法:

#!/usr/bin/env python
# coding:utf-8 # 自定义的格式化
# x='{0}{0}{0}'.format('dog')
#
# print(x) # class Date:
# def __init__(self,year,mon,day):
# self.year=year
# self.mon=mon
# self.day=day
# d1=Date(2016,12,26)
#
# x='{0.year}{0.mon}{0.day}'.format(d1)
# y='{0.year}:{0.mon}:{0.day}'.format(d1)
# z='{0.mon}-{0.day}-{0.year}'.format(d1)
# print(x)
# print(y)
# print(z) # x='{0.year}{0.mon}{0.day}'.format(d1)
# y='{0.year}:{0.mon}:{0.day}'
# z='{0.mon}-{0.day}-{0.year}' format_dic={
'ymd':'{0.year}{0.mon}{0.day}',
'm-d-y':'{0.mon}-{0.day}-{0.year}',
'y/m/d':'{0.year}/{0.mon}/{0.day}'
}
class Date:
def __init__(self,year,mon,day):
self.year=year
self.mon=mon
self.day=day
def __format__(self, format_spec): # 自定制的format方法
# print('我执行啦')
# print('--->',format_spec)
if not format_spec or format_spec not in format_dic:
format_spec='y/m/d'
fm=format_dic[format_spec]
return fm.format(self) d1=Date(2018,2,16)
# format(d1) #d1.__format__()
# print(format(d1))
print(format(d1,'ymd'))
print(format(d1,'y:m:d'))
print(format(d1,'m-d-y'))
print(format(d1,'m-d:y'))
print('===========>',format(d1,''))

三个 item 的方式,区别于 attr 的方式

#!/usr/bin/env python
# coding:utf-8 class Foo:
def __getitem__(self, item):
print('getitem')
return self.__dict__[item] def __setitem__(self, key, value):
print('setitem')
self.__dict__[key]=value def __delitem__(self, key):
print('delitem')
self.__dict__.pop(key) f1 = Foo()
## 点的方式操作属性和字典方式操作的区别是调用不同的内部方法 f1.age = 18 # 使用点的方式不会触发__setitem__ 只会触发 __setattr__
f1['name']='alex' # 使用字典方式调用时才会触发的方法
f1['gender']='male' print(f1.age) # 不会触发 __getitem__ 方法
print(f1['age']) del f1['gender'] print(f1.__dict__)
#!/usr/bin/env python
# coding:utf-8 class Foo:
def __init__(self,name,age):
self.name = name
self.age =age # def __str__(self): # 自定制的对象显示方式
# return '名字是%s 年龄是%s' %(self.name, self.age) def __repr__(self): # 自定制的对象显示方式
return '名字%s 年龄%s' %(self.name, self.age) # str是在print时显示,repr是在解释器中显示 f1 = Foo('alex',18)
print(f1) # 实际上是在触发 __str__ 如果找不到,就会去找 __repr__ 来代替

使对象可迭代:

#!/usr/bin/env python
# coding:utf-8 # 使对象可迭代
class Foo:
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 # l=list('hello')
# for i in l:
# print(i)
f1=Foo(10)
# print(f1.__next__())
# print(f1.__next__())
# print(f1.__next__())
# print(f1.__next__()) for i in f1: # obj=iter(f1)------------>f1.__iter__()
print(i) #obj.__next_() class Fib:
def __init__(self):
self._a=1
self._b=1 def __iter__(self):
return self
def __next__(self):
if self._a > 100:
raise StopIteration('终止了')
self._a,self._b=self._b,self._a + self._b
return self._a f1=Fib()
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print('==================================')
for i in f1:
print(i)

减少内存消耗: __slots__

#!/usr/bin/env python
# coding:utf-8 class Foo: def __init__(self,name,age):
self.name = name
self.age =age # 取消了所有实例的__dict__ 优势是节省内存。 附加优势是限制了属性
# __slots__ = 'name'
__slots__ = ['name','age'] f1 = Foo('alex',18)
# print(f1.__dict__) 出错 print(f1.__slots__)
print(f1.name,f1.age) # 参考: https://www.cnblogs.com/rainfd/p/slots.html

描述符:

#!/usr/bin/env python
# coding:utf-8 class Foo:
def __get__(self, instance, owner):
print('===>get方法')
def __set__(self, instance, value):
print('===>set方法',instance,value)
instance.__dict__['x']=value #b1.__dict__
def __delete__(self, instance):
print('===>delete方法') class Bar:
x=Foo() #在何地?
def __init__(self,n):
self.x=n #b1.x=10
b1=Bar(10)
print(b1.__dict__)
b1.x=11111111111111
print(b1.__dict__) b1.y=11111111111111111111
print(b1.__dict__) # 参考: https://www.cnblogs.com/wangyongsong/p/6769256.html # print(Bar.__dict__)
#在何时?
# b1=Bar()
# b1.x
#
# b1.x=1
#
# del b1.x # print(b1.x)
#
# b1.x=1
# print(b1.__dict__)
#
# del b1.x

通常, 大家都是用的pip 或 pip3 来安装相应模块的。

但是,pip的官方仓库,经常响应太慢。很容易timeout.

所以,参照网友的方法: 修改成国内的pip源。比如下面的是豆瓣的源,在国内南方响应较快。

以我win10 为例: 运行, %Appdata%  然后在打开的目录下新建文件夹pip   打开pip  ,在下面新建pip.ini文件 ,贴上下面的内容保存即可。

[global]
trusted-global=pypi.douban.com
index-url = https://pypi.douban.com/simple
[install]
trusted-host = pypi.doubanio.com

现在使用pip install 就快多了。

python模块之_pip_其它的更多相关文章

  1. 使用C/C++写Python模块

    最近看开源项目时学习了一下用C/C++写python模块,顺便把学习进行一下总结,废话少说直接开始: 环境:windows.python2.78.VS2010或MingW 1 创建VC工程 (1) 打 ...

  2. Python模块之configpraser

    Python模块之configpraser   一. configpraser简介 用于处理特定格式的文件,其本质还是利用open来操作文件. 配置文件的格式: 使用"[]"内包含 ...

  3. Python模块之"prettytable"

    Python模块之"prettytable" 摘要: Python通过prettytable模块可以将输出内容如表格方式整齐的输出.(对于用Python操作数据库会经常用到) 1. ...

  4. python 学习第五天,python模块

    一,Python的模块导入 1,在写python的模块导入之前,先来讲一些Python中的概念性的问题 (1)模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质是.py ...

  5. windows下安装python模块

    如何在windows下安装python模块 1. 官网下载安装包,比如(pip : https://pypi.python.org/pypi/pip#downloads) pip-9.0.1.tar. ...

  6. 安装第三方Python模块,增加InfoPi的健壮性

    这3个第三方Python模块是可选的,不安装的话InfoPi也可以运行. 但是如果安装了,会增加InfoPi的健壮性. 目录 1.cchardet    自动检测文本编码 2.lxml    用于解析 ...

  7. Python基础篇【第5篇】: Python模块基础(一)

    模块 简介 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就 ...

  8. python 模块加载

    python 模块加载 本文主要介绍python模块加载的过程. module的组成 所有的module都是由对象和对象之间的关系组成. type和object python中所有的东西都是对象,分为 ...

  9. pycharm安装python模块

    这个工具真的好好,真的很喜欢,它很方便,很漂亮,各种好 pycharm安装python模块:file-setting-搜索project inte OK

随机推荐

  1. ExtJs常用功能

    1.判断内容是否修改 1) var cgrid = query_panel.cgrid; var v = cgrid.getValues(); //console.log(v); if (v != & ...

  2. sqlite3如何判断一个表是否已经存在于数据库中 C++

    SELECT count(*) AS cnt FROM sqlite_master WHERE type='table' AND name='table_name';cnt will return 0 ...

  3. Project Euler 75: Singular integer right triangles

    题目链接 思路: 勾股数组,又称毕达格拉斯三元组. 公式:a = s*t b = (s^2 - t^2) / 2 c = (s^2 + t^2) / 2 s > t >=1 且为互质的奇数 ...

  4. MySQL 存储过程的变量

    MySQL  存储过程的变量 变量是一个命名数据对象,变量的值可以在存储过程执行期间更改.我们通常使用存储过程中的变量来保存直接/间接结果. 这些变量是存储过程的本地变量. 注意:变量必须先声明后,才 ...

  5. PHP常用工具类

    <?php namespace isslib\Util; use think\Config; /** * 常用工具类 * User: xaxiong * Date: 2016/12/19 * T ...

  6. YARN的三种调度器的使用

    YRAN提供了三种调度策略 一.FIFO-先进先出调度器 YRAN默认情况下使用的是该调度器,即所有的应用程序都是按照提交的顺序来执行的,这些应用程序都放在一个队列中,只有在前面的一个任务执行完成之后 ...

  7. 第一次java程序设计作业

    通过JAVA语言的学习,使我对计算机语言有了更加深入的认识和理解.知道了许多JAVA语言与其他语言的区别和特性,及其在我们生活中所发挥的重要作用.最后用一句话表明在学习JAVA语言过程中的感受,那就是 ...

  8. 怎么样获取小米手机4的ROOT超级权限

    小米手机4有何方法开通了Root超级权限?各位都清楚,Android手机有Root超级权限,一旦手机开通了root相关权限,能够实现更强大的功能,打比方各位部门的营销部门的妹纸,使用个别营销工具都需要 ...

  9. 博弈论初步(SG函数)

    讲解见此博客https://blog.csdn.net/strangedbly/article/details/51137432 理解Nim博弈,基于Nim博弈理解SG函数的含义和作用. 学习求解SG ...

  10. Linux中python3,django,redis以及mariab的安装

    1. Linux中python3,django,redis以及mariab的安装 2. CentOS下编译安装python3 编译安装python3.6的步骤 1.下载python3源码包 wget ...