《深入理解Python》读书笔记Ⅲ

1、每个类的实例有一个内置属性,__class__,它是对象的类。可以通过__class__、__name__、__bases__之类来获取对象本身的属性。


2、Pythob不支持任何形式的函数重载,每个类只能有一个__init__方法,并且如果一个子类拥有一个__init__方法,它总是覆盖父类的__init__方法,甚至子类可以用不同的参数列表来定义它。


3、在 Python 2.2 之前的版本中,你不可以直接子类化字符串、列表以及字典之类的内建数据类型。作为补偿 ,Python 提供封装类来模拟内建数据类型的行为 ,比如:UserString、UserList 和 UserDict。通过混合使用普通和特殊方法 ,UserDict 类能十分出色地模仿字典。在 Python 2.2 和其后的版本中,可以直接从 dict 内建数据类型继承。


4、__setitem__和__getitem__用来获得和设置数据项。在使用object["attribute"]的时候,Python会自动调用__getitem__来获得相应的数据项,使用objec["attribute"] = value的时候,Python会自动调用__setitem__来设置相应的数据项值。


5、当在一个类中存取数据属性时,需要限定属性名:self.attribute。当调用类中的其他方法时,需要限定方法名:self.method。


6、repr函数是一个内置函数,它返回一个对象的字符串表示,它可以用在任何对象上,不仅仅是类的实例。__cmp__在比较类实例时被调用,使用==比较任意两个Python对象时,Python会自动调用对象的__cmp__方法。__len__在调用len(instance)时被调用。__delitem__在调用del instance[key]时调用。


7、在 Java  中,通过使用 str1 == str2 可以确定两个字符串变量是否指向同一块物 理内存位置。这叫做对象同一性 ,在 Python 中写为str1 is str2。在 Java 中要 比较两个字符串值 ,要使用 str1.equals(str2)  ;在 Python 中,你要使用str1 ==  str2


8、在 Java  中,静态变量 (在 Python 中叫类属性) 和实例变量 (在 Python  中叫数据属性) 两者都是紧跟在类定义之后定义的 (一个有 static 关键字 ,一个没有)。在 Python 中,只有类属性可以直接定义在类里 ,数据属性定义在 __init__ 方法中。 __class__  是每个类实例的一个内置属性 (也是每个类的),它是一个类的引用,而 self 是一个类的实例。

classcounter:
      count = 0                  
      def __init__(se lf):
        self.__class__.count +=1 

因为 count 是一个类属性,通过直接对类引用而得到。


9、如果一个Python函数、类方法或属性的名字以两个下划线开始(但不是结束),它是私有的;其他所有的都是公有的。


10、一旦异常被处理了,处理通常在 try...except 块之后的第一行继续进行,注意块之后的第一行将总是打印出来,无论异常是否发生。一个 try...except 块可以有一条 else 子句,就像 if 语句。如果在 try 块中没有异常引发,然后 else 子句被执行。


11、文件对象的tell方法告诉被打开文件中的当前位置。文件对象的seak方法在被打开文件中移动到另一个位置,第二个参数指出第一个参数是什么意思:0表示移动到一个绝对位置(从文件起始处算起),1表示移到一个相对位置(从当前位置算起),2表示相对于文件尾的位置。read方法从被打开文件中读取指定个数的字节,并且返回含有读取数据的字符串,可选参数指定了读取的最大字节数,如果没有指定参数,read将读到文件末尾。文件对象的closed属性表示对象时打开还是关闭了文件。


12、os.environ是系统上所定义的环境变量的dictionary。


13、sys.modules是一个字典,它包含了从Python开始运行起,被导入的所有模块,键字就是模块名,键值就是模块对象。使用__module__类属性和sys.modules dictionary来获取已知类所在的模块。每个 Python 类都拥有一个内置的类属性 __module__,它定义了这个类的模块的名字。


14、实际上,Python仅会对缺省表达式计算一次,是在模块导入的第一次。hasattr 函数用来检查一个对象是否具有一个特定的属性。


15、os.path的join函数把一个或多个部分路径名连接成一个路径名,在将路径名加到文件名上之前,join将在路径名后添加额外的反斜线。expanduser将对使用~来表示当前用户根目录的路径名进行扩展。

import os 
os.path.join("c:\\music\\ap\\", "mahadeva.mp3")       #返回'c:\\music\\ap\\mahadeva.mp3' 
os.path.join("c:\\music\\ap", "mahadeva.mp3")       #返回'c:\\music\\ap\\mahadeva.mp3' 
os.path.expanduser("~")                    #返回'c:\\Documents and Settings\\mpilgrim\\My Documents' 
os.path.join(os.path.expanduser("~"),  "Python")            #返回'c:\\Documents and Settings\\mpilgrim\\My Documents\\Python' 

split函数对一个全路径名进行分割,返回一个包含路径和文件名的tuple。os.path的splitext函数用来对文件名进行分割,返回一个包含了文件名和文件扩展名的tuple。

os.path.split("c:\\music\\ap\\mahadeva.mp3")                       #返回('c:\\music\\ap', 'mahadeva.mp3') 
(filepath, filename) = os.path.split("c:\\music\\ap\\mahadeva.mp3")              #此时filepath被赋予'c:\\music\\ap'值,filename被赋予'mahadeva.mp3'值
(shortname, extension) = os.path.splitext(filename)                 #此时shortname被赋予'mahadeva' 值,extension被赋予'.mp3'值

listdir函数接收一个路径名,并返回那个目录的内容的list,它同时返回文件和文件夹,但不指明哪个是文件,哪个是文件夹。

isfile函数接收一个路径名,如果路径表示一个文件,则返回1,否则为0。isdir函数接收一个路径名,当路径表示一个目录,则返回1,否则为0。

os.listdir("c:\\music\\_singles\\")          #返回这个路径下的文件和文件夹

os.path.normcase(file)根据操作系统的缺省值对大小写进行标准化处理,normcase 是一个有用的函数,用于对大小写 不敏感操作系统的一个补充。这种操作系统认为 mahadeva.mp3 和 mahadeva.MP3 是同一个文件名。


16、glob模块,接收一个通配符并且返回文件的或目录的完整路径与之匹配。

glob.glob('c:\\music\\_singles\\*.mp3')             #返回目录路径下所有匹配的.mp3文件
glob.glob('c:\\music\\_singles\\s*.mp3')           #返回指定目录中所有以“s”开头并以“.mp3”结尾的文件
glob.glob('c:\\music\\*\\*.mp3')                  #返回指定目录及其子目录下所有匹配的".mp3“文件

你可能感兴趣的:(python初学)