Python面向对象
Python面向对象
1、class定义
#定义类
class Emp:
pass
2、静态变量
class Emp:
#静态变量,通过类直接访问
id = 100
#__开头的是私有属性
__age = 20
#通过类直接访问
print Emp.id
3、构造函数和实例方法
3.1 构造函数
构造函数名称固定,就是__init__方法。
class Emp:
#构造函数
def __init__(self , name ,age):
#实例变量
self.name = name
self.age = age
3.2 成员函数
通过对象调用的函数,函数首个参数需要使用self作为参数。
class Foo:
#定义实例方法
def add(self , a, b):
return a + b ;
foo = Foo()
#调用实例函数
foo.add(1,2)
3.3 类方法
类方法不需要实例化对象,通过类名直接进行调用,相当于java中的静态方法。但方法的首参必须是cls类型,表示当前的类。
class Foo:
#cls表示当前的类
@classmethod
def add(cls , a , b):
return a + b ;
Foo.add(1,2)
3.4 静态方法
python中的静态方法类似于scala中的函数,即可以直接访问的函数,不需要通过类名访问。首个参数也无需定义成cls。
class Foo:
@staticmethod
def add(a,b)
return a + b ;
#调用方法
add(1,2)
4、析构函数
class Emp:
#析构函数
def __del__(self):
print "销毁对象!"
#创建对象
e = Emp()x
#销毁对象
e = None
#删除对象的成员
del e.name
#删除变量
del e
5、内置属性
#内置属性判断
print hasattr(e , "age")
print hasattr(e , "name")
print getattr(e , "age")
setattr(e , "age" , 40)
print getattr(e , "age")
print getattr(e , "name" , "nobody")
delattr(e, "age")
print hasattr(e , "age")
#访问类的属性
#__dict__访问类的成员
d = Emp.__dict__
print d
#访问类名
print Emp.__name__
#所有父类构成的元组
print Emp.__bases__
6、多重继承
class Horse:
#__开头的方法时私有方法
def __run(self):
print "runing~~~"
def eat(self):
print "eating..."
def __init__(self , name):
self.name = name
class Donkey:
money = 100
def __init__(self ,age):
self.age = age
#多重继承
class Luozi(Horse , Donkey):
def eat(self):
print "WWWWWWWWWWW"
def __init__(self):
#显式调用父类构造函数
Horse.__init__(self , "tom")
Donkey.__init__(self ,12)
l1 = Luozi()
print l1.eat()
6、异常
# try-except-finally
try:
pass
except ErrorA:
pass
except ErrorB:
pass
except:
pass
finally:
pass
# try-finally
try:
pass
finally:
pass
# 异常方式
try:
thread.start_new_thread(sayhello, ("tom", 12))
except Exception as e:
print e