第四章 朝思暮想是对象

4.1 轻松看对象

除了面向过程的编程范式,Python还支持面向对象的编程范式。

2.类

把相近的东西归为一类,而且给这个类起一个名字。

需要用到:class函数

用法:class 类名(对象类别)

           statement

区分属性:①数据性:e.g. feature=True

                  ②行为:e.g. def (行为名)(self,参数)

                                statement

3.对象

定义:对象是类的实例:summer=Bird()

对属性的引用:对象.属性:summer.chirp("jijiji")

对对象个性的修改:

①通过行为和self:def set_color(self,color)

                                     self.color=color(给定的参数)

②特殊方法:_init_()、_add_().....(在方法名前后加两个下划线)

在引入对象的同时定义参数

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

4.2 继承者们

1.子类

①子类:拥有父类的所有属性,同时可定义子类的特有属性,还可替换。

②继承:子类拥有父类的所有属性。

2.属性覆盖

使用同名属性名,父类的属性会被子类覆盖。

super():一个内置类,能产生指代父类的对象。通过super,我们在子类的同名方法中调用了父类的方法。

4.3 那些年,错过的对象

查找类的名字:type()

查询类的属性:dir()、help()

①列表对象:

pass:特殊关键字,用于说明,在该语法结构中“什么都不做”,保持结构完整性

我们看到类还有许多“隐藏技能”。比如下面一些list的方法,可以返回列表的信息:

>>>a = [1, 2, 3, 5, 9.0, "Good", -1, True, False, "Bye"]

>>>a.count(5) # 计数,看总共有多少个元素5

>>>a.index(3) # 查询元素3第一次出现时的下标

>>>a.append(6) # 在列表的最后增添一个新元素6

>>>a.sort() # 排序

>>>a.reverse() # 颠倒次序

>>>a.pop() # 去除最后一个元素,并将该元素返回。

>>>a.remove(2) # 去除第一次出现的元素2

>>>a.insert(0,9) # 在下标为0的位置插入9

>>>a.clear() # 清空列表

②元组与字符串对象

>>>a = (1, 3, 5)

>>>a.count(5) # 计数,看总共有多少个元素5

>>>a.index(3) # 查询元素3第一次出现时的下标

>>>a="abc"

>>>a.index("c")

>>>str = "Hello World!"

>>>sub = "World"

>>>str.count(sub) # 返回:sub在str中出现的次数

>>>str.find(sub) # 返回:从左开始,查找sub在str中第一次出现的位置。 #如果str中不包含sub,返回 -1

>>>str.index(sub) # 返回:从左开始,查找sub在str中第一次出现的位置。 #如果str中不包含sub,举出错误

>>>str.rfind(sub) # 返回:从右开始,查找sub在str中第一次出现的位置 #如果str中不包含sub,返回 -1

>>>str.rindex(sub) # 返回:从右开始,查找sub在str中第一次出现的位置 # 如果str中不包含sub,举出错误

>>>str.isalnum() # 返回:True,如果所有的字符都是字母或数字

>>>str.isalpha() # 返回:True,如果所有的字符都是字母

>>>str.isdigit() # 返回:True,如果所有的字符都是数字

>>>str.istitle() # 返回:True,如果所有的词的首字母都是大写


>>>str.isspace() # 返回:True,如果所有的字符都是空格

>>>str.islower() # 返回:True,如果所有的字符都是小写字母

>>>str.isupper() # 返回:True,如果所有的字符都是大写字母

>>>str.split([sep, [max]]) # 返回:从左开始,以空格为分隔符(separator),# 将str分 割为多个子字符串,总共分割max次。# 将所得的子字符串放在一个表中返回。可以以 # str.split(",")的方式使用其他分隔符

>>>str.rsplit([sep, [max]]) # 返回:从右开始,以空格为分隔符(separator),# 将str分 割为多个子字符串,总共分割max次。# 将所得的子字符串放在一个表中返回。可以以 # str.rsplit(",")的方式使用其他分隔符

 >>>str.join(s) # 返回:将s中的元素,以str为分隔符, # 合并成为一个字符串。

>>>str.strip([sub]) # 返回:去掉字符串开头和结尾的空格。 # 也可以提供参数sub,去掉位于字符串开头和结尾的sub

>>>str.replace(sub, new_sub) # 返回:用一个新的字符串new_sub替换str中 # 的sub

>>>str.capitalize() # 返回:将str第一个字母大写

>>>str.lower() # 返回:将str全部字母改为小写

>>>str.upper() # 返回:将str全部字母改为大写

>>>str.swapcase() # 返回:将str大写字母改为小写,小写字母改为大写

>>>str.title() # 返回:将str的每个词(以空格分隔)的首字母# 大写

>>>str.center(width) # 返回:长度为width的字符串,将原字符串放入# 该字符串中 心,其他空余位置为空格。

>>>str.ljust(width) # 返回:长度为width的字符串,将原字符串左对# 齐放入该字符串,其 他空余位置为空格。

>>>str.rjust(width) # 返回:长度为width的字符串,将原字符串右对齐放入# 该字符串,其 他空余位置为空格。

③词典对象

for k in example_dict.keys():

print(example_dict[k])

for v in example_dict.values():

          print(v)

for k,v in example_dict.items():

          print(k, v)

用clear()方法,清空整个词典:

example_dict.clear() # 清空example_dict,example_dict变为{}

4.4 意想不到的对象

①循环对象:包含有一个_next_()方法,这个方法的目的是生成循环的下一个结果。在生成过循环的所有结果之后,该方法将抛出StopIteration异常。循环接收到这个异常,就会知道循环已经结束,将停止调用__next__()。

手动循环例子:

>>>example_iter = iter([1, 2])

 >>>example_iter.__next__() # 显示1

>>>example_iter.__next__() # 显示2

>>>example_iter.__next__() # 出现StopIteration异常。

我们可以把 循环对象包裹在for中自动进行循环:

for itemin iter([1, 2]):

 print(item)

相对于序列,循环对象的好处在于:不用在循环还没开始的时候,就生成要使用的元素。所有要使用的元素可以在循环过程中逐渐生成。这样,不仅节省了空间,提高了效率,还会使编程更加灵活。

生成器:自定义循环对象。

②函数对象

任何一个有_call_()特殊方法的对象:

class SampleMore(object):

def __call__(self, a):

return a + 5

add_five = SampleMore() # 生成函数对象

print(add_five(2)) #像一个函数一样调用函数对象,结果为7。

③模块对象

Python中的模块对应一个.py文件

语法:import xxx、from xxx import xxx

引入模块的所有属性:from xxx import *

也可以用对象.属性的方式调用。

④异常对象

try等捕捉到的程序中出现的异常。

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容