day6-class继承

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day6-class继承相关的知识,希望对你有一定的参考价值。

Part1---单个父类class继承

 1 class people:
 2     def __init__(self,name,age):
 3         self.name=name
 4         self.age=age
 5 
 6     def eat(self):
 7         print(%s is eating...%self.name)
 8     def talking(self):
 9         print(%s is talking...%self.name)
10     def sleeping(self):
11         print(%s is sleeping under class people...%self.name)
12 
13 
14 class man(people):     #一个class直接调用了另一个已有的class,就像是函数嵌套,只不过这里是内嵌class(继承)
15     #pass              part1,啥都不写,后面直接m1.eat()
16 
17     def __init__(self,name,age,money):        #part3
18         #people.__init__(self,name,age)       #方法1经典写法,调用父位people中的name,age
19         super(man,self).__init__(name,age)    #方法2新式写法,用super,内建的方法,格式:super(自己class名,self).__init__(父位中的形参)
20                                               #好处1:当父位class的名字更改后不会影响到这里,因为这里不需要写父位名
21                                               #好处2:一个class可以继承多个父位,如果用上面的方法则要写多个父位.__init__()
22         self.muchmoney=money                  #这里只用写自己多出来的形参
23 
24     def USD(self):                            #part3
25         print(%s has much %s money!!! % (self.name, self.muchmoney))
26 
27     def shout(self):             #part2 当然还可以在自己的class下面定义自己的方法
28         print(%s is shouting...%self.name)
29     def sleeping(self):          #part2 c1, 重写,定义跟继承class中同样名字的函数方法  自己的会精细,override
30         people.sleeping(self)    #part2 c2, 重构, 如果还想保留继承class中的东西,但又添加自己的,这里引用继承class中的函数方法
31         print(%s is sleeping under class man...%self.name)
32 
33 
34 class women(people):       #part2
35     def birth(self):
36         print(%s is born baby...%self.name)
37 
38 
39 #m1=man(‘alex‘,22)
40 # m1.eat()          #part1, #alex is eating...
41 # m1.shout()        #part1, #alex is shouting...
42 # #m1.sleeping()    #part2 c1, alex is sleeping under class man...
43 # m1.sleeping()     #part2 c2,
44 # # alex is sleeping under class people...
45 # # alex is sleeping under class man...
46 #
47 # w1=women(‘alley‘,20)
48 # w1.birth()    #alley is born baby...
49 # #w1.shout()    #man和women同属于父class people,子class之间无法互相调用函数方法, 但可以连起来(参见下继承-2.py中的例子)
50 # #AttributeError: ‘women‘ object has no attribute ‘shout‘
51 
52 
53 m1=man(alex,22,10w)
54 m1.USD()    #alex has much 10w money!!!

 

Part2---多个父类class继承

 1 #class多父位继承,以下例子中class man/women继承了2个父位:people和couple
 2 
 3 class people:
 4     def __init__(self,name):
 5         self.abc=name
 6         self.fridends=[]
 7 
 8 class couple(object):         #理解成(object)=__init__(self)
 9     def marry(self,obj):
10         print(%s and %s are couple %(self.abc,obj.abc))
11         #这里调用了class people中的self.abc,又加了个obj.abc. 注意这里的abc必须跟class people中的abc名字一样
12         #那abc究竟指啥呢? 由于m1.marry(w1)中的w1会赋值给第二个%s,但前提是couple这个class中没有定义
13         #自己的构造函数,也就是没def __init__(self), 如果ojb.xxx=class people中的self.xxx=name=‘w1=women(‘alley‘)‘的话,
14         #那就相当于将alley赋值给abc了
15 
16         #下面的例子更改成obj.xxxxx,但不更改class people中的self.abc,结果会是在women object中找不到xxxxx这个静态属性
17         #print(‘%s and %s are couple‘ %(self.abc,obj.xxxxx))
18         #AttributeError: ‘women‘ object has no attribute ‘xxxxx‘
19 
20         #self.fridends.append(obj)          #print-1
21         self.fridends.append(obj.abc)       #print-2,打印obj中的abc,结果是alley
22 
23 #class man(people,couple):
24 class man(couple,people):   #位置不会有影响,couple里面找不到
25     pass
26 
27 #class women(people,couple):
28 class women(couple, people):
29     pass
30 
31 
32 m1=man(alex)
33 w1=women(alley)
34 m1.marry(w1)
35 
36 #m1.marry(‘afafaf‘)
37 #   File "C:/x-working/pycharm/project-14/Day6/继承-2.py", line 10, in marry
38 #     print(‘%s and %s are couple‘ %(self.abc,obj.abc))
39 # AttributeError: ‘str‘ object has no attribute ‘abc‘
40 
41 #print(m1.fridends[0])            #print-1
42 #<__main__.women object at 0x0000000002939D68>
43 
44 print(m1.fridends[0])             #print-2
45 #alley

以上是关于day6-class继承的主要内容,如果未能解决你的问题,请参考以下文章

操作 Java 泛型:泛型在继承方面体现与通配符使用

26.Qt Quick QML-RotationAnimationPathAnimationSmoothedAnimationBehaviorPauseAnimationSequential(代码片段

Flask之模板之宏继承包含

java中封装,继承,多态,接口学习总结

php如何实现多继承?

如何覆盖继承的嵌套类中存在的虚拟方法