Python 面相对象编程,类

# 类的 实例化, 以及继承。
# 把一个抽象的类变成一个具体的对象的过程, 叫实例化。

class
Role(object): def __init__(self,name,role,weapon,life): self.name = name self.role = role self.weapon = weapon self.life = life def buy_weapon(self,weapon): self.weapon = weapon print("[%s] buy weapon [%s]" %(self.name,weapon)) def info(self): print(''' ------个人信息------- 姓名:%s 身份:%s 武器:%s 生命:%s --------------------- ''' %(self.name,self.role,self.weapon,self.life)) p1 = Role('jicki','警察','手枪',100) p2 = Role('luck','匪徒','机关枪',100) p1.info() p2.info() p1.buy_weapon('AK47') p2.buy_weapon('狙击枪') p1.info() p2.info()



打印结果:

------个人信息-------
姓名:jicki
身份:警察
武器:手枪
生命:100
---------------------

------个人信息-------
姓名:luck
身份:匪徒
武器:机关枪
生命:100
---------------------

[jicki] buy weapon [AK47]
[luck] buy weapon [狙击枪]


------个人信息-------
姓名:jicki
身份:警察
武器:AK47
生命:100
---------------------

------个人信息-------
姓名:luck
身份:匪徒
武器:狙击枪
生命:100
---------------------

 

 

 1 # 类的继承
 2 class ShoolMember(object):
 3     def __init__(self,name,age,sex):
 4         self.name = name
 5         self.age = age
 6         self.sex = sex
 7         self.enroll()
 8 
 9     def enroll(self):
10         print("[%s] 加入了学校" %self.name)
11 
12     def tell(self):                            # 所有类 公有方法
13         print("大家好,我的名字叫[%s]" %self.name)
14 
15 class Teacher(ShoolMember):       #继承了 ShoolMember 类
16     def __init__(self,name,age,sex,coures,salary):    # 重写 ShoolMember 父类的构造方法__init__
17         super(Teacher,self).__init__(name,age,sex)    # 新式类 的继承,继承了父类的__init__
18         self.coures = coures
19         self.salary = salary
20 
21     def teaching(self):                              # Tenacher 类 私有方法
22         print("[%s] 是教 [%s] 课程" %(self.name,self.coures))
23 
24 class Student(ShoolMember):    #继承 ShoolMember 类
25     def __init__(self,name,age,sex,coures,tuition):    # 重写 ShoolMember 父类的构造方法__init__
26         super(Student,self).__init__(name,age,sex)     # 新式类 的继承,继承了父类的__init__
27         self.coures = coures
28         self.tuition = tuition
29 
30     def pay_tuition(self):                           # Student 类 私有方法
31         print("[%s] 学习 [%s] 课程交了 [%s] 学费" %(self.name,self.coures,self.tuition))
32 
33 # 实例化
34 t1 = Teacher("alax",22,'F','Python',10000)
35 t2 = Teacher('wupeiqi',23,'F','Python',10000)
36 s1 = Student('jicki',22,'F','Python',6000)
37 
38 t1.teaching()       # 调用 Teacher 私有方法
39 s1.pay_tuition()    # 调用 Student 私有方法
40 
41 t1.tell()     # 调用共用 方法
42 s1.tell()     # 调用共用 方法
43 
44 
45 输出结果:
46 [alax] 加入了学校
47 [wupeiqi] 加入了学校
48 [jicki] 加入了学校
49 [alax] 是教 [Python] 课程
50 [jicki] 学习 [Python] 课程交了 [6000] 学费
51 大家好,我的名字叫[alax]
52 大家好,我的名字叫[jicki]

 

 1 Python 多态:
 2     多态性 允许子类类型的指针赋值给父类类型的指针。
 3     多态的作用是什么?  
 4     我们知道,封装可以隐藏实现细节,使的代码模块化;
 5     继承可以扩展已存在的代码模块(类);
 6     封装与继承的目的都是为了 代码重用。
 7     而多态则是为了实现 接口重用,多态的作用就是为了类的继承和派生的时候,保证能使用类的成员中任意类的实例的某一属性时的正确调用。
 8     
 9 
10 Python 是不支持多态的,可以使用如下方法实现:
11 
12 class Animal(object):
13     def __init__(self,name):
14         self.name = name
15         
16     def talk(self):
17         raise NotImplementedError("Subclass must implement")
18         
19 class Cat(Animal):
20     def talk(self):
21         return 'miao, miao !'
22         
23 class Dog(Animal):
24     def talk(self):
25         return 'wang wang !'
26         
27 
28 def animal_talk(obj):
29     print(obj.talk())
30     
31 d = Dog("WangCai")
32 c = Cat("BoSi")
33 
34 animal_talk(c)
35 animal_talk(d)
36 
37 
38 输出结果:
39 miao, miao !
40 wang wang !

 

 

 

 

类的成员可以分为三大类:字段,方法,属性


                            普通字段
                    字段:
                            静态字段
        
                            普通方法
        类成员        方法:    类方法
                            静态方法
        
        
                    属性:    普通属性
                    
                    

一、字段:
    字段包括: 普通字段 和 静态字段,他们在定义和使用中有所区别,本质区别是 内存中保存的位置不同。
    
    普通字段属于 对象 (实例变量)
    静态字段属于 类   (类变量)
    
    
    
    
类的装饰器:

    1. @classmethod ,类方法,  不能访问实例变量。
    
    2. @staticmethod, 静态方法, 既不能访问实例变量,也不能访问类变量。
    
    3. @property,  把方法变成属性,调用不需要加()

 

posted @ 2016-07-13 16:20  丶小炒肉  阅读(179)  评论(0)    收藏  举报