Yhzhtk's Blog

(热爱技术,高效Code)     归档  标签  源码  关于 


Python 面向对象、异常等学习笔记

2013-06-10    python  学习笔记 


昨天把python的基本用法看了一遍,今天继续,学习python的新的特性,面向对象、异常、文件操作等。

1、在python中,一切都是对象,包括int,可以使用help(int)查看。

2、在python的类中,每个方法定义时需要设置一个额外的参数(第一个参数)为self(类似Java中的this),表示调用本对象的这个方法,但是在使用时就不需要加上这个参数了,python会自动提供这个值。

3、__init__类的构造函数,__del__是类的析构函数,因为是类的函数,所以定义有一个参数必须是self,如def __init__(self),使用时不需要参数。

4、类的变量和对象的变量,它们根据是类还是对象 拥有 这个变量而区分。类的变量可以理解是Java中的静态变量,而对象就是普通变量。类的变量在类的第一缩进层定义,而普通变量使用self.变量名。

5、Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。

只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求的(与双下划线前缀不同)。

6、类的继承,在__init__中实现父类的__init__表示继承了父类。举例说明:

#!/usr/bin/python
# Filename: inherit.py

class SchoolMember:
    '''Represents any school member.'''
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print '(Initialized SchoolMember: %s)' % self.name

    def tell(self):
        '''Tell my details.'''
        print 'Name:"%s" Age:"%s"' % (self.name, self.age),

class Teacher(SchoolMember):
    '''Represents a teacher.'''
    def __init__(self, name, age, salary):
        SchoolMember.__init__(self, name, age)
        self.salary = salary
        print '(Initialized Teacher: %s)' % self.name

    def tell(self):
        SchoolMember.tell(self)
        print 'Salary: "%d"' % self.salary

class Student(SchoolMember):
    '''Represents a student.'''
    def __init__(self, name, age, marks):
        SchoolMember.__init__(self, name, age)
        self.marks = marks
        print '(Initialized Student: %s)' % self.name

    def tell(self):
        SchoolMember.tell(self)
        print 'Marks: "%d"' % self.marks

t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 22, 75)

print # prints a blank line

members = [t, s]
for member in members:
    member.tell() # works for both Teachers and Students

运行结果为:

$ python inherit.py
(Initialized SchoolMember: Mrs. Shrividya)
(Initialized Teacher: Mrs. Shrividya)
(Initialized SchoolMember: Swaroop)
(Initialized Student: Swaroop)

Name:"Mrs. Shrividya" Age:"40" Salary: "30000"
Name:"Swaroop" Age:"22" Marks: "75"

如果在继承元组中列了一个以上的类,那么它就被称作 多重继承 。

7、Python读写文件,python中有file对象,可以读写文件

定义如f = file('poem.txt', 'w'),其中 'w'是模式,可为读模式('r')、写模式('w')或追加模式('a')。

用f.write(str)写文件,可用f.readline()读文件的一行,如果len(line)为0,则判断为文件结束。注意,在读写文件之后,要f.close()关闭文件。

8、存储器(我觉得翻译为序列化器更好点,提供持久化功能)

Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象。

还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多(比pickle快1000倍)。你可以使用它们中的任一个,而我们在这里将使用cPickle模块。记住,我们把这两个模块都简称为pickle模块。

使用cPickle.dump(obj, file)序列化,使用cPickle.load(file)反序列化。

9、异常

try..except 和java中的一样,可以指定捕获异常,另外你还可以让try..catch块关联上一个else从句。当没有异常发生的时候,else从句将被执行。

使用raise可以引发异常,raise Exception().

try..finally,在一个try块下,你可以同时使用except从句和finally块。如果你要同时使用它们的话,需要把一个嵌入另外一个。





Load Disqus comments, wait a moment..

分类标签

jekyll3   编码1   windows1   bootstrap1   git3   删除1   命令3   python11   ide1   学习笔记3   实例分析1   mp3-tag1   github1   gravatar1   goagent1   翻墙1   C#4   找茬工具1   微博自动评论1   电脑监控1   备份1   云搜索1   wxPython1   py2exe1   yaml1   Eric1   PyQt1   Django1   设计模式5   翻译4   单例1   工厂1   抽象工厂1   生成器1   原型1   适配器1   桥接1   组合1   装饰1   外观1   享元1   代理1   MVC1   观察者1   状态1   策略1   模板1   访问者1   职责链1   解释器1   迭代器1   中介者1   备忘录1   js1   resize bar1   geohash1   口琴1   rpm安装gitlab1   CentOs1   WordPress1   数据库1   读脏数据1   丢失的修改1   不可重复读1   幻影读1   1   隔离1   思维导图1   事务1   笔记迁移1   note1   issue1  

最新博文

最新评论

Feed订阅


©2013 首页   关于     View me on GitHub Powered by Jekyll & Bootstrap 知识共享许可协议