码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象3

时间:2017-11-20 01:11:52      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:ima   静态方法   def   输入参数   pass   object   升级   int   self   

使用静态方法实现类的多态

 1 class Animal(object):
 2     def __init__(self, noice, name):
 3         self.noice = noice
 4         self.name = name
 5 
 6     @staticmethod  #使用静态方法装饰以后,可以直接使用类进行调用。不必实例化。
 7     def talk(self):
 8         print(this is %s talk %s%(self.name, self.noice))
 9 
10 class Dog(Animal):
11     pass
12 
13 class Cat(Animal):
14     pass
15 
16 d1 = Dog(汪汪汪, 哈士奇)
17 c1 = Cat(喵喵喵, 短尾)
18 Animal.talk(d1) #使用类调用统一的接口,对传入的对象按照对象特有属性进行处理,进而实现多态
19 Animal.talk(c1)

类的封装--升级版

 1 class F1(object):
 2     def __init__(self, name):
 3         self.name = name
 4     def display(self):
 5         print(F1, self.name)
 6 
 7 class F2(object):
 8     def __init__(self, args):
 9         self.args = args
10 
11 class F3(object):
12     def __init__(self, args):
13         self.args = args
14 c1 = F1(test)
15 c2 = F2(c1)
16 c3 = F3(c2)
17 print( c3.args.args.name )
#类中也可以封装类。 17行打印结果为14行输入参数test。 整个逻辑为:1、c3 = F3(c2) ==> c3.args = c2; 2、c2 = F2(c1) ==> c2.args = c1。再加上1的推论有c3.args.args = c1,重复1,2推论有
c3.args.args.name = test

继承升级版

 1 class F1(object):
 2     def a1(self):
 3         print(F1a1)
 4     def a2(self):
 5         print(F1a2)
 6 class F2(F1):
 7     def a1(self):
 8         self.a2()
 9         print(F2a1)
10     def a2(self):
11         print(F2a2)
12 class F3(F2):
13     def a2(self):
14         print(F3a2)
15 c = F3()
16 c.a1()
17 #执行过程:
18 #1、c.a1先去执行F2.a1
19 #2、执行第9行代码,该self.a2此时的self由于c是由F3实例化而来,所以此时self为c即self.a2需要先在类F3本地找a2方法。打印F3a2
20 #3、继续执行第10行代码,打印F2a1

 

面向对象3

标签:ima   静态方法   def   输入参数   pass   object   升级   int   self   

原文地址:http://www.cnblogs.com/flags-blog/p/7863001.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!