for x in range(n):
a, b = b, a + b
return a
__getattr__Python还有另一个机制,那就是写一个__getattr__()方法,动态返回一个属性。当调用不存在的属性时,比如score,Python解释器会试图调用__getattr__(self, 'score')来尝试获得属性,这样,我们就有机会返回score的值。已有的属性,比如name,不会在__getattr__中查找。
__call__1.任何类,只需要定义一个__call__()方法,就可以直接对实例进行调用。
2.通过callable()函数,我们就可以判断一个对象是否是“可调用”对象。
9.3.8枚举类
为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能:
from enum import Enum
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
9.3.9元类 type()
要创建一个class对象,type()函数依次传入3个参数:
class的名称;
继承的父类集合,注意Python支持多重继承,如果只有一个父类,别忘了tuple的单元素写法;
class的方法名称与函数绑定,这里我们把函数fn绑定到方法名hello上。
metaclassmetaclass,直译为元类,简单的解释就是:当我们定义了类以后,就可以根据这个类创建出实例,所以:先定义类,然后创建实例。但是如果我们想创建出类呢?那就必须根据metaclass创建出类,所以:先定义metaclass,然后创建类。连接起来就是:先定义metaclass,就可以创建类,最后创建实例。
__new__()方法接收到的参数依次是:
当前准备创建的类的对象;
类的名字;
类继承的父类集合;
类的方法集合。
9.3.10将实例用作属性
使用代码模拟实物时,当你添加越来越多的特点和细节是,会发现属性和方法以及代码文件都越来越长,这时候可以把其中一部分分离,重新组成一个类。可以将一个大类分成许多小类。
9.3.11模拟实物
模拟较复杂的实物,需要从较高的逻辑层次考虑。为了编写效率更高,更简洁准确的代码,可能需要不停的重组类。
9.4导入类
1.随着不断对类的添加,即使很优秀的继承也会是代码变得很长,所以python可以让你把类导入模块。并在主程序中导入使用所需要的模块。
2.为自己的每个模块写文档字符串,说明模块的作用,对内容进行简要叙述。
3.从一个模块导入多个类,用逗号隔开,并根据自己的需要创建实例。
4.也可以导入整个类,并在实例前加上类名,和访问需要的类。
5.在一个模块中导入另一个模块。
9.5python标准库(模块)
Python标准库是一组模块,只需要import语句就可以导入使用。
字典让你把信息关联起来,但不记录你添加键值对的顺序,要创建字典并记录添加键值对的顺序,可使用模块collections中的orderedDict类。OrderedDict的实例和字典一样,不过记录了添加键值对的添加顺序。
OrderdDict很不错,兼具列表和字典的特点,有时候很需要。
random模块
包含各种方式生成随机数的函数。其中randint()返回一个位于指定范围内的整数。
datetime是模块
datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。如果仅导入import datetime,则必须引用全名datetime.datetime。
datetime.now()返回当前日期和时间,其类型是datetime。
常用的第三方库还有MySQL的驱动:mysql-connector-python,用于科学计算的NumPy库:numpy,用于生成文本的模板工具Jinja2,等等。
1.urlparse 模块,urlpasrse 模块提供了一些基本功能,用于处理 URL 字符串。这些功能包括 urlparse()、 urlunparse()和 urljoin()。
2.urlparse()将 urlstr 解析成一个 6 元组(prot_sch, net_loc, path, params, query, frag)。前面已 经描述了这里的每个组件。
3.urlunparse()的功能与 urlpase()完全相反,其将经 urlparse()处理的 URL 生成 urltup 这个 6 元组(prot_sch, net_loc, path, params, query, frag),拼接成 URL 并返回。
4.urllib 模块提供了许多函数,可用于从指定 URL 下载数据,同时也可以对字符串进行编 码、解码工作,以便在 URL 中以正确的形式显示出来。下面将要介绍的函数包括 urlopen()、 urlretrieve()、quote()、unquote()、quote_plus()、unquote_plus()和 urlencode()。
5.urlopen()打开一个给定 URL 字符串表示的 Web 连接,并返回文件类型的对象。
6.urlretrieve()不是用来以文件的形式访问并打开 URL,而是用于下载完整的 HTML,把另存为文件。
9.6类编码风格
熟悉与类相关的编码风格,当程序复杂时更应该这样。
1.类名应采用 驼峰命名法 ,即类的首字母大写,不含下划线,而实例名和模块名都首字母小写,并用下划线连接单词。
2.在每个类定义后面添加文档字符串说明,简要描述类的功能作用,并且在每个模块下面都要添加文档字符串说明,对模块下的类可以做什么进行简要说明。
3.用空行来组织代码,但不要滥用,在类中可用一个空行分隔方法,用两个空行分隔类。
4.需要同时导入标准库中的模块和自己编写的模块时,先编写导入标准库模块的import语句,用一个空行隔开,在导入自己编写的模块import语句。在包含多个import语句时,可以让人容易弄明白程序中各个模块的由来。
以上就是Python基础学习之类的介绍的详细内容,更多请关注Gxl网其它相关文章!