第四章 朝思暮想是对象

4.1 轻松看对象

4.1.1 面向对象语言的来历

  • Simula语言
  • C++语言
  • Java语言
  • C#语言
  • Objective-C语言
  • Python


4.1.2 类

Class 类名:
    属性变量/方法函数

class:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。

object:所有类都会继承的类,所有类的基类。

属性 attribute:类内部定义的变量,说明类的属性,所有属于该类的对象会共享这些属性。

方法 method:类内部定义的函数,类的行为属性。第一个参数必须是用于指代对象自身的self,调用时不用传入数据。


4.1.3 对象

对象:对象名 = 类名()。对象是类的实例。

属性引用:对象.属性。

对象属性设置:在类中通过self参数设定,用对象.属性来操作。必须在某个方法内部才能操作类属性,所以对象属性无法在类下方直接赋初值。

初始化对象属性:__init__()。

  • 每当对象建立时被调用,设定对象属性。
  • 加入的其他指令会在创建对象时执行。
  • 在调用类时,类的后面可以跟一个参数列表。这里放入的数据将传给__init__()的参数。

self:可以在一个方法内部调用同一类的其他方法。


4.1 继承者们

4.2.1 子类

class 子类名(基类名):
    ...

子类:由基类派生的新类。

继承:子类会享有基类的所有属性。继承的过程中可以再子类中增加基类不存在的属性。


4.2.2 属性覆盖

属性覆盖:在子类中替换基类已经存在了的属性。

super:super().被覆盖的方法名()。一个内置类,在子类中调用基类中被覆盖的方法,能产生一个指代父类的对象。


4.3 那些年,错过的对象

4.3.1 列表对象

类型:对象所属类的名字。

内置类:Python自带的提前定义好的类。

  • type(obj):返回参数的数据类型。
  • dir(obj):来查询一个类或者对象的所有属性。不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法dir(),该方法将被调用。如果参数不包含dir(),该方法将最大限度地收集参数信息。
  • help(obj):查询说明文档。

pass:占位关键字。什么也不做,保持了程序结构的完整性。

list的方法:列表名.方法名(参数)。

  • 列表名.acount(obj):统计某个元素在列表中出现的次数。

  • 列表名.index(obj):从列表中找出某个值第一个匹配项的索引位置。

  • 列表名.append(obj):在列表末尾添加新的元素。

  • 列表名.sort(cmp = None, key = None, reverse = False):排序。

    • cmp:可选参数, 如果指定了该参数会使用该参数的方法进行排序。
    • key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    • reverse:排序规则,reverse = True 降序, reverse = False 升序(默认)。
  • 列表名.reverse():颠倒次序。

  • 列表名.pop():移除列表中的一个元素,并且返回该元素的值。

  • 列表名.remove(obj):移除列表中某个值的第一个匹配项。

  • 列表名.insert(index, obj):将对象插入列表。

  • 列表名.clear():清空列表。

  • 列表名.extend(seq):用新列表扩展原来的列表。


4.3.2 元组与字符串对象

元组的方法:元组名.方法名()。元组只能进行查阅,不能进行修改操作。

  • 元组名.count(obj):统计某个元素在元组中出现的次数。

  • 元组名.index(obj):从元组中找出某个值第一个匹配项的索引位置。

字符串的方法:字符串名.方法名(参数)。字符串是元组的一种,通过删除原有字符串,再建立一个新的字符串的方法,能改变字符串。没有违背元组的不可变性。

  • 字符串名.count(sub, start = 0,end = len(string)):返回字符串里某个字符出现的次数。

    • sub:搜索的子字符串
    • start:字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
    • end:字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
  • 字符串名.find(str, beg = 0, end = len(string)):检测字符串中是否包含子字符串。如果包含子字符串返回开始的索引值,否则返回-1。

  • 字符串名.index(str, beg = 0, end = len(string)):检测字符串中是否包含子字符串。如果包含子字符串返回开始的索引值,否则报错。

  • 字符串名.rfind(str, beg = 0 end = len(string)):返回字符串最后一次出现的位置(从右向左查询),如果没有匹配项则返回-1。

  • 字符串名.rindex(str, beg = 0 end = len(string)):返回字符串最后一次出现的位置(从右向左查询),如果没有匹配项则报错。

  • 字符串名.isalnum():如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False。

  • 字符串名.isalpha():如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回False。

  • 字符串名.isdigit():如果字符串至少有一个字符并且只包含数字则返回True,否则返回False。

  • 字符串名.istitle():如果字符串至少有一个字符并且所有的词的首字母都是大写则返回True,否则返回False。

  • 字符串名.isspace():如果字符串至少有一个字符并且只包含空格,则返回True,否则返回False。

  • 字符串名.islower():如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回True,否则返回False。

  • 字符串名.isupper():如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回False。

  • 字符串名.split(str="", num=string.count(str)):通过指定分隔符对字符串进行切片,如果参数num有指定值,则分隔num+1个子字符串。返回分割后的字符串列表。

    • str:分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
    • num:分割次数。默认为 -1, 即分隔所有。
  • 字符串名.rsplit(str="", num=string.count(str))):通过指定分隔符对字符串从右向左进行切片,如果参数num有指定值,则分隔num+1个子字符串。返回分割后的字符串列表。

  • 字符串名.join(seq):以字符串作为分隔符,将seq中所有的元素(的字符串表示)合并为一个新的字符串

  • 字符串名.strip([chars]):截掉字符串左边的空格或指定字符。

  • 字符串名.replace(old, new[, max]):把字符串中的old(旧字符串)替换成new(新字符串),如果指定第三个参数max,则替换不超过 max 次。

  • 字符串名.capitalize():把字符串的第一个字符大写。

  • 字符串名.lower():转换字符串中所有大写字符为小写。

  • 字符串名.upper():转换字符串中的小写字母为大写。

  • 字符串名.swapcase():翻转字符串中的大小写。

  • 字符串名.title():转换所有的单词拼写首字母为大写,且其他字母为小写。

  • 字符串名.centet(width[, fillchar]):返回一个原字符串居中,并使用fillchar(默认为空格)填充至长度width的新字符串。

  • 字符串名.ljust(width[, fillchar]):返回一个原字符串左对齐,并使用fillchar(默认为空格)填充至长度width的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。

  • 字符串名.rjust(width[, fillchar]):返回一个原字符串右对齐,并使用fillchar(默认为空格)填充至长度width的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。

  • 字符串名.endswith(suffix[, start[, end]]):用于判断字符串是否以指定后缀suffix结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。

  • 字符串名.expandtabs(tabsize=8):把字符串中的tab符号('\t')转为空格,tab符号('\t')默认的空格数是8。

  • 字符串名.lstrip([chars]):截掉字符串开头指定的字符(默认为空格)或字符序列。

  • 字符串名.rstrip([chars]):截掉字符串结尾指定的字符(默认为空格)或字符序列。

  • 字符串名.strip([chars]):移除字符串头尾指定的字符(默认为空格)或字符序列。

  • 字符串名.splitlines([keepends]):按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数keepends为False,不包含换行符,如果为True,则保留换行符。

  • 字符串.startswith(substr, beg=0,end=len(string)):检查字符串是否是以指定子字符串开头,如果是则返回True,否则返回False。如果参数beg和end指定值,则在指定范围内检查。

  • 字符串名.zfill(width):返回指定长度的字符串,原字符串右对齐,前面填充0。


4.3.3 词典对象

词典的方法:词典名.方法名(参数)。

  • 词典名.key():以列表返回一个词典所有的键。

  • 词典名.values():以列表返回词典中的所有值。

  • 词典名.claer():删除词典内所有元素。

  • 词典名.copy():返回一个词典的浅复制,即引用。

  • 词典名.fromkeys(seq[, value]): 创建一个新词典,以序列 seq 中元素做词典的键,value 为字典所有键对应的初始值。

  • 词典名.get(key, default=None):返回指定键的值,如果值不在词典中返回default值。

  • 词典名. has_key(key):判断键是否存在于词典中,如果键在字典dict里返回true,否则返回false。

  • 词典名.items():以列表返回可遍历的(键, 值) 元组数组。

  • 词典名.setdefault(key, default=None):返回指定键的值,如果值不在词典中将会添加键并将值设为default值。

  • 词典名.update(dict2):把词典dict2的键/值对更新到词典里。

  • 词典名.pop(key[,default]):删除字典给定键key及对应的值,返回值为被删除的值。key值必须给出。否则,返回default值。

  • 词典名.popitem():返回并删除字典中的最后一对键和值。如果字典已经为空,却调用了此方法,就报出KeyError异常。


4.4 意想不到的对象

4.4.1 循环对象

循环对象:包含有一个__next__()方法。这个方法的目的是生成循环的下一个结果。在生成过循环的所有结果之后,该方法将抛出StopIteration异常。所有要使用的元素可以在循环过程中逐渐生成。这样,不仅节省了空间,提高了效率,还会使编程更加灵活。

调用循环对象:当一个像for这样的循环语法调用循环对象时,它会在每次循环的时候调用 next()方法,直到StopIteration出现。循环接收到这个异常,就会知道循环已经结束,将停止调用next()。

iter():把一个列表转变为循环对象。这个循环对象将拥有__next__()方法。

生成器:自定义循环对象。生成器的编写方法和函数定义类似,只是在return的地方改为yield。生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。生成器自身又构成一个循环对象,每次循环使用一个yield返回的值。


4.4.2 函数对象

函数对象:任何一个有call() 特殊方法的对象都被当作是函数。


4.4.3 模块对象

import:引入其他文件中定义的函数,实际上就是引入模块对象的属性。可以利用对象.属性的方式来调用模块的方法,可以拓展程序的命名空间,避免同名冲突。

模块包:将功能相似的模块放在同一个文件夹中,构成一个模块包。

  • 该文件夹中必须包含一个__init__.py的文件,提醒Python,该文件夹为一个模块包。
  • __init__.py可以是一个空文件。
  • 每个模块对象都有一个__name__属性,用来记录模块的名字。

if __name__ == "__main__":如果这个文件作为一个主程序运行,那么将执行下面的操作。 有的时候,一个.py文件中同时有类和对象的定义,以及对它们的调用。当这些.py文件作为库引入时,我们可能并不希望执行这些调用。通过把调用语句放到上面的if中,就可以在调用时不执行这些调用语句了。


4.4.4 异常对象

except… as…:用新的变量代表捕获到的类型对象。

代码地址:https://gitee.com/sibyltui/learn_programming_from_python

你可能感兴趣的:(第四章 朝思暮想是对象)