面向对象3



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

 

   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

 

 

猜你喜欢

转载自epoll-select.iteye.com/blog/2406355