面向对象的三大特性是指:封装、继承和多态。
第一步:将内容封装到某处
_init_就是构造方法,根据类创建方法自动执行
self 是一个形式参数
当执行 obj1 = Foo(‘wupeiqi’, 18 ) 时,self 等于 obj1
当执行 obj2 = Foo(‘alex’, 78 ) 时,self 等于 obj2
第二步:从某处调用被封装的内容
调用被封装的内容时,有两种情况:
通过对象直接调用
通过self间接调用
对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。
注:除了子类和父类的称谓,你可能看到过 派生类 和 基类 ,他们与子类和父类只是叫法不同而已。
Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先和广度优先
当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。
| 
 3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
 | 
 class F1: 
    pass 
class S1(F1): 
    def show(self): 
        print ‘S1.show‘ 
class S2(F1): 
    def show(self): 
        print ‘S2.show‘ 
# 由于在Java或C#中定义函数参数时,必须指定参数的类型 
# 为了让Func函数既可以执行S1对象的show方法,又可以执行S2对象的show方法,所以,定义了一个S1和S2类的父类 
# 而实际传入的参数是:S1对象和S2对象 
def Func(F1 obj): 
    """Func函数需要接收一个F1类型或者F1子类的类型""" 
    print obj.show() 
s1_obj = S1() 
Func(s1_obj) # 在Func函数中传入S1类的对象 s1_obj,执行 S1 的show方法,结果:S1.show 
s2_obj = S2() 
Func(s2_obj) # 在Func函数中传入Ss类的对象 ss_obj,执行 Ss 的show方法,结果:S2. 
 | 
一、字段
由上图可是:
class Foo:
    def __init__(self, name):
        self.name = name
    def ord_func(self):
        """ 定义普通方法,至少有一个self参数 """
        # print self.name
        print ‘普通方法‘
    @classmethod
    def class_func(cls):
        """ 定义类方法,至少有一个cls参数 """
        print ‘类方法‘
    @staticmethod
    def static_func():
        """ 定义静态方法 ,无默认参数"""
        print ‘静态方法‘
# 调用普通方法
f = Foo()
f.ord_func()
# 调用类方法
Foo.class_func()
# 调用静态方法
Foo.static_func()
# ############### 定义 ###############
class Foo:
    def func(self):
        pass
    # 定义属性
    @property
    def prop(self):
        pass
# ############### 调用 ###############
foo_obj = Foo()
foo_obj.func()
foo_obj.prop   #调用属性
class Province:
    # 静态字段
    country = ‘中国‘
    def __init__(self, name):
        # 普通字段
        self.name = name
# 直接访问普通字段
obj = Province(‘河北省‘)
print obj.name
# 直接访问静态字段
Province.country
原文:http://www.cnblogs.com/stonerainjc/p/6821446.html