Python学习笔记(2)


20、在Python类定义的方法通常有三种:实例方法、类方法以及静态方法。
       a、 这三者之间的区别是实例方法一般都以self作为第一个参数,必须和具体的对象实例进行绑定才能访问,而类方法以cls作为第一个参数,cls表示类本身,定义时使用@classmethod,那么通过cls引用的必定是类对象的属性和方法;
        b、而静态方法不需要默认的任何参数,跟一般普通函数类似,定义的时候使用@staticmethod,静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过对象来引用。
        c、而实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。
21、创建实例对象
    要创建一个类的实例,可以使用类的名称,并通过__init__方法接受参数。
    "创建 Employee 类的第一个对象"
    emp1 = Employee("Zara", 2000)
    "创建 Employee 类的第一个对象"
    emp2 = Employee("Manni", 5000)
22、访问属性
    使用点(.)来访问对象的属性。使用如下类的名称访问类变量:
    emp1.displayEmployee()

    可以添加、删除、修改类的属性,如下所示:
        emp1.age = 7       #添加一个’age'属性
        emp1.age = 8       #修改 ’age'属性
        del  emp1.ag        #添加一个’age'属性
        
        getattr(obj, name, default) :访问对象的属性。
        hasattr(obj, name):检查是否存在一个属性。
        setattr(obj, name, vlaue):设置一个属性,如果属性不存在,会创建一个新属性。
        delattr(obj, name):删除属性。
23、Python内置类属性
        __dict__:类的属性(包含一个字典,由类的数据属性组成)
        __doc__:类的文档字符串
        __name__:类名
        __module__:类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__等于mymod)
        __bases__:类的所有父类构成元素(包含了以下个由所有父类组成的元组)
24、Python对象销毁(垃圾回收)
        a、在Python内部记录着所有使用中的对象各有多少引用;
            一个内部跟踪变量,称为一个引用计数器。
        b、当对象被创建时,就创建了一个引用计数,当这个对象不再需要时,这个对象的引用计数变为0时,它被垃圾回收,但是回收不是“立即”的,由解释器在适当的时机,将垃圾对象占用的内存空间回收。
25、类的继承
        面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。
        继承语法:
            class 派生类名(基类名)://...基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。
        在Python中继承中的一些特点:
            1)、在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造函数中亲自专门调用;
            2)、在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量,区别在于基类中调用普通函数时并不需要带上self参数;
            3)、Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找,如果在继承元组中列了一个以上的类,那么它就被称作“多重继承”
26、调用子类方法
        序号     方法                                        描述                                                      简单调用
        1           __init__(self, [, args ... ])        构造函数                                               obj=class(args)
        2           __del__(self)                          析构函数,删除一个对象                     dell obj
        3           __repr__(self)                        转化为供解释器读取的形式                  repr(obj)
        4           __str__(self)                          用于将值转化为适于人阅读的形式       str(obj)
        5          __cmp__(self, x)                    对象比较                                                 cmp(obj, x)    

27、运算符重载
        class Vector:
                def __init__(self, a, b):
                    self.a = a
                    self.b = b
                def __str__(self):
                    return 'Vector (%d, %d)' % (self.a, self.b)
                def __add__(self, other):
                    return Vector(self.a + other.a, self.b + other.b)
        v1 = Vector(2, 10)
        v2 = Vector(5, -2)
        print v1+v2     输出:Vector(7, 8)
28、类的私有属性
        __private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attr类的方法
        在类的内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数
29、类的私有方法
        __private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用self.__private_method
30、模块
        模块让你能够有逻辑的组织python代码段,把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块也是python对象,具有随机的名字属性用来绑定或引用。简单的说,模块就是一个保存了python代码的文件,模块能定义函数、类和变量,模块里也能包含可执行的代码。
31、import语句
        想使用python源文件,只需要在另一个源文件里执行import语句,可以自动防止重复import,形如:import  module1, module2 ...
        当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。
32、from ... import语句
        python的from语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:form  module  import  name1[, name2[, ... nameN]]
        例如:需要导入fib的fibonacci函数,使用如下语句:form  fib  import  fibonacci (这个声明不会把整个fib模块导入到当前的命名空间中,它只会将fib里的fibonacci单个引入到执行这个声明的模块的全局符号表)
33、form ... import*语句
        把一个模块的所有内容全部导入到当前的命名空间也是可行的,只需要使用如下声明:form  modname  import *  (这种声明不该被过多的使用)。
34、定位模块
        当导入一个模块,python解析器对模块位置的搜索顺序是:当前目录;如果不在当前目录,python则搜索在shell变量PYTHONPATH下的每个目录;如果都找不到,python会观看默认路径,Linux下默认路径一般为/usr/local/lib/python;模块搜索路径存储在system模块的sys.path变量中,变量里包含当前目录,PYTHONPATH和由安装过程决定默认目录。
35、PYTHONPATH变量
        作为环境变量,PYTHONPATH由装在一个列表里的许多目录组成。PYTHONPATH的语法和shell变量PATH的一样。
36、命名空间和作用域
        a、变量是拥有匹配对象的名字(标识符),命名空间是一个包含了变量名称(键)和它们各自相应的对象(值)的字典。一个python表达式可以访问局部命名空间和全局命名空间里的变量,同名隐藏的原则同C/C++。
        b、每个函数都有自己命名空间,类的方法的作用域规则和通常函数一样,默认任何在函数内赋值的变量都是局部的。因此,如果要给全局变量在一个函数里赋值,必须使用global语句。
        c、global varName的表达式会告诉python,varName是一个全局变量,这样python就不会再局部命名空间里寻找这个变量了。
37、dir()函数
        dir()函数一个排好序的字符串列表,内容是一个模块里定义过的名字,返回的列表容纳了在一个模块里定义的所有模块,变量和函数。
import math
content = dir(math)
print (content)
输出如下:
    ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh','degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fm
od', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
38、globals()和locals()函数
        根据调用地方不同,globals()和locals()函数可被用来返回全局和局部命名空间里的名字;如果在函数内部调用locals(),返回的是所有能在函数里访问的命名;如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字;两个函数的返回类型都是字典,所以名字能用keys()函数摘取。
39、python中的包
        包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的python的应用环境,考虑一个Phone目录下的pots.py文件。这个文件有如下源代码:
        #pots.py
        #coding=utf-8
        #!/usr/bin/python
        def Pots()
                print "I'm Pots Phone"
        同样的,我们有另外两个保存了不同函数的文件:
            Phone/Isdn.py    含有函数Isdn()
            Phone/G3.py()
        现在,在phone目录下创建file init.py
            Phone/__init__.py
        此文件可为空
            from Phone.pots import post
        或者当你导入phone时,为了能够使用所有函数,你需要在__init__.py里使用显式的导入语句:如下:
            from Pots import Pots
            from Isdn import Isdn
            from G3 import G3
        当你把这些代码添加到init.py之后,导入phone包的时候这些类就全都是可用的了。
            #Now import your Phone Package
            import Phone
            Phone.Pots()
            Phone.Isdn()
            Phone.G3()
        以上实例输出结果:
            I'm Pots Phone
            I'm 3G Phone
            I'm Isdn Phone
40、模块发布
        1)、mymodule目录结构体如下:
                |—setup.py
                |—suba
                |        |—aa.py
                |        |—bb.py
                |        |—__init__.py
                |
                |—subb
                        |—cc.py
                        |—dd.py
                        |—__init__.py
        2)、编写setup.py,py_modules需要指明所需要包含的py文件
                from distuils.core import setup
                set(name="xwp", version="1.0", description="xwp's module", author="hanbo", py_modules=['suba.aa', 'suba.bb', 'subb.cc', 'subb.dd'])
        3)、构建模块
                python setup.py build
                构建后目录结构
                |—build
                |        |—lib.linux-i686-2.7
                |                |—suba
                |                |        |—aa.py
                |                |        |—bb.py
                |                |        |—__init__.py
                |                |
                |                |—subb
                |                        |—cc.py
                |                        |—dd.py
                |                        |—__init__.py
                |
                |—setup.py
                |         
                |—suba
                |        |—aa.py
                |        |—bb.py
                |        |—__init__.py
                |
                |—subb
                        |—cc.py
                        |—dd.py
                        |—__init__.py
        4)、生产发布压缩包
                python setup.py sdist
                打包后,生成最终发布压缩包xwp-1.0.tar.gz,目录结构
                |—build
                |        |—lib.linux-i686-2.7
                |                |—suba
                |                |        |—aa.py
                |                |        |—bb.py
                |                |        |—__init__.py
                |                |
                |                |—subb
                |                        |—cc.py
                |                        |—dd.py
                |                        |—__init__.py
                |
                |—dist
                |        |—xwp-1.0.tar.gz
                |
                |—MANIFEST
                |
                |—setup.py
                |         
                |—suba
                |        |—aa.py
                |        |—bb.py
                |        |—__init__.py
                |
                |—subb
                        |—cc.py
                        |—dd.py
                        |—__init__.py      
41、文件操作
    1)、打印到屏幕
            最简单的输出方法是用print语句,可以给它传递零个或多个用逗号隔开的表达式,或者占位符 
    2)、读取键盘输入
            python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘,如下:
                raw_input():从标准输入读取一行,并返回一个字符串(去掉结尾的换行符)
                input():和raw_input()基本可以互换,但是它会假设你的输入是一个有效的python表达式,并返回运算结果。
    3)、打开文件
            open():打开一个文件,创建一个file对象。
            file_object=open(file_name [, access_mode][, buffering])
            参数如下:
                file_name:是一个包含了要访问的文件名称的字符串;
                access_mode:决定了打开文件的模式(只读、写入、追加等);
                buffering:缓冲区的大小(为0:就是不会有寄存;为1:访问文件时会寄存行;大于1:寄存区的缓冲大小。如果取负值,寄存区的缓冲区大小则为系统默认)
    4)、file对象属性
            一个文件被打开后,有一个file对象,可以得到有关该文件的各种信息。
            属性                  描述
            file.closed        返回true如果文件已被关闭,否则返回false
            file.mode         返回被打开文件的访问权限
            file.name         返回文件的名称
            file.softspace  如果用print输出后,必须跟一个空格符,则返回false,否则返回true
    5)、文件关闭
            close():刷新缓冲区里任何还没有写入的信息,并关闭该文件,这之后便不能再进行写入。当一个文件对象的引用被重新指定给另一个文件时,python会关闭之前的文件,用close()方法关闭文件是一个很好的习惯。
    6)、write():将任何字符产写入一个打开的文件。python字符串可以是二进制数据,而不是仅仅是文字。write方法不再字符串的结尾添加换行符'\n'。
    7)、read():从一个打开的文件中读取一个字符串,python字符串可以是二进制,而不仅仅是文字。
    8)、文件位置
            seek():告诉你文件内的当前位置,就是下次读写会发生在文件开头多少字节之后。
            seek(offset [, from])改变当前文件的位置,offset变量表示要移动的字节数。from变量指定开始移动字节的参考位置,如果from被设为0,这意味着将文件的开头作为移动字节的参考位置,如果设为1,则使用当前的位置作为参考位置,如果它被设为2,那么该文件的末尾将作为参考位置。
    9)、重命名
            rename():需要两个参数,当前文件名和新文件名。(使用需要导入os模块
    10)、删除文件
            remove():需要提供要删除的文件名作为参数。(使用需要导入os模块
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值