python类 & 对象风格
python对象风格object & 类class学习笔记
类class
- 一般类的创建
# 创建类
class Foo:
def bar(self): #self必填
print('Bar')
def hello(self, name):
print('I am %s' % name)
# 实例化
obj = Foo()
obj.bar
obj.hello('zzw')
- 通过构造函数实例化创建
class Foo:
def __init__(self, name, age): #注意inti前后是双下划线__,不是单_
name = self.name
age = self.age
##实例化
obj1 = Foo('zzw', 26)
print(obj1.name)
print(obj1.age)
obj2 = Foo('lg', 25)
print(obj2.name)
print(obj2.age)
对象风格object
python可以继承多个类,有经典类 & 新式类 两种
- 经典类(深度优先)
- 新式类(广度优先) #推荐用
# 经典类
class A:
pass
class B(A):
pass
#新式类,当前类或父类继承object类
class A(object):
pass
class B(A):
pass
例如,如下继承关系
#经典类 & 新式类
class D:
def bar(self):
print 'D.bar'
class C(D):
def bar(self):
print 'C.bar'
class B(D):
def bar(self):
print 'B.bar'
#A继承B、C
class A(B, C):
def bar(self):
print 'A.bar'
当对象A调用bar函数时:
a = A()
a.bar()
经典类和新式类的搜索顺序为:
A中搜索bar()
搜到-中止,不再搜索
未搜到-报错
多态特性
- 不支持类似与C++定义的多态写法,python多态属于“简单直接”类型的
class B:
pass
class C1(B):
def bar(self):
print 'C1.bar'
class C2(B):
def bar(self):
print 'C2.bar'
# ####################### 多态写法 ########################
# 1. C++类型(python伪code示意)
def detail(class B):
B.bar()
# 2. python类型
def detail(obj):
obj.bar()
# 调用
c1 = C1()
c2 = C2()
detail(c1) # C1.bar
detail(c2) # C2.bar