异常
除了关键字不一样外,其余的与java完全相同。
try-except-finally分别表示java中的try,catch,finally。java中的throw在python中用raise代替。
try:
f = file('x.txt')
except Exception, e: # 捕获异常,并将异常信息用e变量存储
print e
else: # 程序没有异常时执行
print 'no except'
finally: # 与java中一样
print 'finally'
python中所有的异常都是Exception的子类。
else与finally都存在时,如果程序出现异常,不执行else但执行finally;如果程序没有异常,则先执行else,再执行finally。
raise
raise如果不带参数的话,会将当前的异常原样抛出。
logging
日志模块。
basicConfig():
类
python中所有的数据都是对象,包括基本数据类型,而赋值就是将对象的地址赋值给对应的变量,使变量与对象关联起来。由于基本数据类型也是对象,因此a=1语句会执行两个操作:分配一块内存存储1,并使用变量a记录该内存的地址。
类的定义与java一样,通过class关键字表示。
函数
所有函数至少有一个参数,并且所有函数的第一个参数都是self(它代表当前对象自身,同java中的this一样),在使用函数时不需要为第一个参数传值。
所有类的构造函数名都是__init__,而且第一个参数也必须是self。可以在构造函数中为类定义一些全局变量。
类的实例化也与java类似,只不过不需要关键字new。如:
class Demo:
def __init__(self,a): # 构造函数
self.a = a # 定义一个全局变量a
def function(self,b):
return 'Demo%s-%s'%(self.a,b)
d = Demo(3) # 实例化对象,并且传入构造函数需要的参数
print d.function(5) # Demo3-5
python允许对实例变量绑定任何数据,也就是说获取对象后,可以为对象动态添加属性,新添加的属性只为该实例所有,别的实例无法使用。如下:
d = Demo(3)
d1 = Demo(3)
d.name = 'name'
print d.name # name
print d1.name # AttributeError
其实这和__init__一样,在__init__中self指对象本身,而此时也没有任何属性,都是在__init__函数中新添加的属性,只不过__init__是构造函数,每一个对象都会执行,也就保证了每一个对象都会有在__init__中定义的属性。
继承
定义类时,可以在类名后面跟(),并在()中写上父类。所有的类都继承于object。如
class Demo:
def function(self):
return 'Demo'
class Demo2(Demo):# Demo2继承于Demo
a = None
d = Demo2()
print d.function() # Demo
一个类可以多继承,只需要在()中用逗号将父类隔开即要。
class P1(object):
def say(self):
print("say")
class P2(object):
def sing(self):
print("sing")
class C(P1, P2): # C继承于P1,P2
pass
c = C()
c.say()
c.sing()
私有
以双下划线开头的变量是私有的,外界无法直接访问。但要注意以双下划线开头,并且以双下划线结尾的是特殊变量,是可以直接访问的。
class Demo:
def __init__(self,a):
self.__a = a # 私有属性__a
self.