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
时间: 2024-08-29 00:53:54

day6-class继承的相关文章

day6面向对象--继承、多态

继承     继承:就像遗传一样,继承就是拥有父类的所有方法和属性,并且能够定义自己独特的属性和方法,对上面的类进行扩展. 可以什么都不写,直接继承父类,如下: class People(object): def __init__(self,name,age): self.name = name self.age = age def eat(self): print("%s is eating......" %self.name) def sleep(self): print(&quo

day6 面相对象编程 类的继承 经典类新式类

类变量与实例变量构造函数 __author__ = 'meng' class Foo: #n = 12345 #类变量 def __init__(self, name, age): # 构造函数 # 在实例化时做一些类的初始化工作 self.name = name #实例变量(静态属性),作用域就是实例本身 self.age = age def shot(self): #类的方法功能(动态属性) print ('%s.......' %(self.name)) obj = Foo('nick',

Day6 - Python基础6 面向对象编程

Python之路,Day6 - 面向对象学习 本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 1 2 3 4 5 6 7 8 9 10 11

Python之路,Day6 - 面向对象学习

面向过程 VS 面向对象 编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式. 不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路, 大多数语言只支持一种编程范式,当然也有些语言可以同时支持多种编程范式. 两种最重要的编程范式分别是面向过

Python-模块使用-Day6

Python 之路 Day6 - 常用模块学习 本节大纲: 模块介绍time &datetime模块randomossysshutiljson & picleshelvexml处理yaml处理configparserhashlibsubprocesslogging模块re正则表达式 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函

day6心得

面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def person(na

[js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表

所谓组合模式,就是把一堆结构分解出来,组成在一起,现实中很多这样的例子,如: 1.肯德基套餐就是一种组合模式, 比如鸡腿堡套餐,一般是是由一个鸡腿堡,一包薯条,一杯可乐等组成的 2.组装的台式机同理,由主板,电源,内存条,显卡, 机箱,显示器,外设等组成的 把一个成型的产品组成部件,分成一个个独立的部件,这种方式可以做出很多灵活的产品,这就是组合模式的优势 比如:家用台式机电脑,要求配置比较低, 这个时候只需要主板+电源+内存条+机箱+显示器+外设就可以了,不需要配置独立显卡 鸡腿堡+鸡翅+紫薯

day24 继承 接口 多态

抽象类与接口类 接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 class Alipay: ''' 支付宝支付 ''' def pay(self,money): print('支付宝支付了%s元'%money) class Applepay: ''' apple pay支付 ''' def pay(

关键字和继承

1.关键字的使用 2.继承