作者:白宁超
2016年10月10日22:36:57
摘要:继一文之后,笔者又将python官方文档认真学习下。官方给出的pythondoc入门资料包含了基本要点。本文是对文档常用核心要点进行梳理,简单冗余知识不再介绍,作者假使你用c/java/c#/c++任一种语言基础。本系列文章属于入门内容,老鸟可以略看也可以略过,新鸟可以从篇一先接触下python怎样安装与运行,以及pycharm编辑器的使用和配置;篇二介绍python语言中控制语句、列表、字典、元组、循环等基本操作;篇三细解python语言函数的范畴与内容;篇四采用登录的案例详解模块来龙去脉;篇五介绍类的基本操作,扩展虚拟环境、标准类库和下个系列预告。(本文原创,转载注明出处:类的继承案例解析,python相关知识延伸)
目录:
【Python五篇慢慢弹(1)】快速上手学python
【Python五篇慢慢弹(2)】数据结构看python
【Python五篇慢慢弹(3)】函数修行知python
【Python五篇慢慢弹(4)】模块异常谈python
1 类的相关介绍
【小记】本文中所有代码经过测试均可正常运行,python有个问题就是复制后会破坏原有格式。所以读者复制运行时报如下错误:SyntaxError: expected an indented block,是因为空格问题,可以预留4个空格,或者采用tab键空格,本篇也是系列文章的结束,除了类的相关介绍,后面扩展一些独立的知识点,下一个系列将是python自然语言处理系列文章,敬请期待......
命名空间 :从命名到对象的映射。当前命名空间主要是通过 Python 字典实现的.Python 中任何一个“.”之后的命名可以理解为属性 --例如,表达式 z.real 中的 real 是对象 z 的一个属性。如:
表达式 modname.funcname 中,modname 是一个模块对象,funcname 是它的一个属性
因此,模块的属性和模块中的全局命名有直接的映射关系:它们共享同一命名空间,作用域 是一个 Python 程序可以直接访问命名空间的正文区域。至少有三个命名空间可以直接访问的作用域嵌套在一起,包含局部命名的使用域在最里面,首先被搜索;其次搜索的是中层的作用域,这里包含了同级的函数;最后搜索最外面的作用域,它包含内置命名。global 语句用以指明某个特定的变量为全局作用域,并重新绑定它。nonlocal 语句用以指明某个特定的变量为封闭作用域,并重新绑定它。
作用域和命名空间示例
def scope_test():
def do_local():
spam = "local spam"
def do_nonlocal():
nonlocal spam
spam = "nonlocal spam"
def do_global():
global spam
spam = "global spam"
spam = "test spam"
do_local()
print("After local assignment:", spam)
do_nonlocal()
print("After nonlocal assignment:", spam)
do_global()
print("After global assignment:", spam)
scope_test()
print("In global scope:", spam)
运行结果:
解析:
local 赋值语句是无法改变 scope_test 的 spam 绑定。nonlocal 赋值语句改变了 scope_test 的 spam 绑定,并且 global 赋值语句从模块级改变了 spam 绑定。
类的正确设计应该使用一个实例变量
class Dog:
def __init__(self, name):
self.name = name
self.tricks = [] # creates a new empty list for each dog
def add_trick(self, trick):
self.tricks.append(trick)
d = Dog('Fido')
d.add_trick('roll over')
print(d.tricks)
R运行结果:
E:\Python\python.exe E:/sourceCode/pydata/AddPro/MothedDome.py
['roll over']
Process finished with exit code 0
命名空间:
①大写方法名称的首字母,使用一个唯一的小字符串(也许只是一个下划线)作为数据属性名称的前缀,或者方法使用动词而数据属性使用名词。
②类不能用来实现③数据类型。
③一般,方法的第一个参数被命名为 self。这仅仅是一个约定:对 Python 而言,名称 self 绝对没有任何特殊含义。
④函数定义代码不一定非得定义在类中:也可以将一个函数对象赋值给类中的一个局部变量。例如:
通过 self 参数的方法属性,方法可以调用其它的方法:
class Bag:
def __init__(self):
self.data = []
def add(self, x):
self.data.append(x)
def addtwice(self, x):
self.add(x)
self.add(x)
2、类继承实例解析
实例分析:在python中类继承案例,要求如下:
① 创建一个BaseSubDome.py文件,编写类继承文件
② 父类是动物类,有初始化函数,且有动物讲话的方法
③ 子类是一个狗类,继承父类所有属性,并扩展自己方法
④ 调用子类讲话方法,并直接调用父类讲话方法
类继承实例:
#!/usr/bin/env python
# -*- coding: utf-8