首页 > 其他分享 >⼦类调⽤⽗类的同名⽅法和属性

⼦类调⽤⽗类的同名⽅法和属性

时间:2023-07-19 23:55:06浏览次数:27  
标签:__ self 同名 类调 cake 父类 make 属性

说明

子类调用父类同名方法和属性

同名方法2种形式: 通过父类名.方法名()调用指定父类的方法  && super().方法名() # 调用父类的同名方法

同名属性2种形式: 父类名.__init__(self)让父对象初始化(实例属性) 或父类名.类属性

 

方法1:父类名.方法名()

 1 '''
 2 ⼦类调⽤⽗类的同名⽅法和属性:2种方式
 3 1. 通过父类名.方法名()调用指定父类的方法
 4 '''
 5 
 6 
 7 # 1. 师父类,属性和方法
 8 class Master(object):
 9     def __init__(self):
10         self.kongfu = '[古法煎饼果子配方]'
11 
12     def make_cake(self):
13         print(f'执行了Master类的make_cake方法--运用{self.kongfu}制作煎饼果子')
14 
15 
16 # 为了验证多继承,添加School父类
17 class School(object):
18     def __init__(self):
19         self.kongfu = '[高等教育煎饼果子配方]'
20 
21     def make_cake(self):
22         print(f'执行了School类的make_cake方法--运用{self.kongfu}制作煎饼果子')
23 
24 
25 # 2. 定义徒弟类,继承师父类 和 学校类, 添加和父类同名的属性和方法
26 class Prentice(School, Master):
27     def __init__(self):
28         self.kongfu = '[独创煎饼果子技术]'
29 
30     def make_cake(self):
31         # 加自己的初始化的原因:如果不加这个自己的初始化,kongfu属性值是上一次调用的init内的kongfu属性值
32         self.__init__()
33         print(f'运用{self.kongfu}制作煎饼果子')
34 
35     # 子类调用父类的同名方法和属性:把父类的同名属性和方法再次封装
36     def make_master_cake(self):
37         # 父类类名.方法()
38         # 再次调用初始化的原因:这里想要调用父类的同名方法和属性,属性在init初始化位置,所以需要再次调用init
39         Master.__init__(self)
40         Master.make_cake(self)  # 通过父类类名.方法()方式调用父类的方法
41 
42     def make_school_cake(self):
43         School.__init__(self)
44         School.make_cake(self)
45 
46 
47 # 3. 用徒弟类创建对象,调用实例属性和方法
48 prentice_allen = Prentice()
49 prentice_allen.make_cake()  # 运用[独创煎饼果子技术]制作煎饼果子
50 
51 prentice_allen.make_master_cake()  # 执行了Master类的make_cake方法--运用[古法煎饼果子配方]制作煎饼果子
52 
53 prentice_allen.make_school_cake()  # 执行了School类的make_cake方法--运用[高等教育煎饼果子配方]制作煎饼果子
54 
55 prentice_allen.make_cake()  # 运用[独创煎饼果子技术]制作煎饼果子
56 
57 
58 
59 
60 class Parent:
61     name = "Parent"
62 
63 class Child(Parent):
64     name = "Child"
65 
66 child = Child()
67 print(child.name)             # 输出 "Child"
68 print(Parent.name)            # 输出 "Parent"
69 print(Child.name)             # 输出 "Child"
70 print(super(Child, child).name)  # 输出 "Parent"
71 '''
72 总结:
73     1. 类属性(class attribute)是类级别的属性,在所有实例之间共享。
74     2. 实例属性(instance attribute)是实例级别的属性,每个实例都有自己的属性副本。
75     3. 类属性可以通过类名或实例对象访问和修改。
76     4. 实例属性只能通过实例对象访问和修改。
77 '''
78 # print(Master.kongfu)  # 报错:AttributeError: type object 'Master' has no attribute 'kongfu'

方法2:super().方法()

 1 '''
 2 ⼦类调⽤⽗类的同名⽅法和属性2:super()方式
 3 '''
 4 
 5 
 6 class Parent:
 7     def __init__(self):
 8         self.attribute = "Parent Attribute"
 9 
10     def method(self):
11         print("Parent Method")
12 
13 
14 class Child(Parent):
15     def __init__(self):
16         super().__init__()
17         self.attribute = "Child Attribute"
18 
19     def method(self):
20         print("Child Method")
21         super().method()  # 调用父类同名方法
22         # 因为 super() 对象只能访问父类的方法,无法直接访问父类的实例属性。因此对应实例属性,子类对象继承。如果覆盖,无法访问到父类对象的实例属性
23         # print(super().attribute)  # 访问父类的属性(实例属性)  AttributeError: 'super' object has no attribute 'attribute'
24 
25 
26 child = Child()
27 print(child.attribute)  # 输出:Child Attribute
28 child.method()
29 
30 # 输出结果:
31 # Child Attribute
32 # Child Method
33 # Parent Method

 

标签:__,self,同名,类调,cake,父类,make,属性
From: https://www.cnblogs.com/allenxx/p/17567121.html

相关文章

  • 继承之子类重写父类同名属性和方法
    1'''2子类重写父类同名属性和方法3'''456#1.师父类,属性和方法7classMaster(object):8def__init__(self):9self.kongfu='[古法煎饼果子配方]'1011defmake_cake(self):12print(f'执行了Master类的m......
  • 继承之子类复用父类的属性、方法
    1'''2继承:子类复用父类属性、方法3'''456classParent():78def__init__(self):9self.name='Allen'1011defsay(self):12print(f'sayname:{self.name}')131415#子类......
  • 配置文件加载属性
             ......
  • 属性
          ......
  • 伪类选择器,伪元素选择器,选择器的优先级,CSS属性相关
    伪类选择器<style>/*未访问时候显示的*/a:link{color:#FF0000;}/*鼠标移动到链接上*/a:hover{color:#FF00FF}/*选定的链接*/a:active{color:#0000......
  • odoo editable两种属性的区别
    editable=top时,新增的行出现的第一行,如下图:editable=bottom,,新增的行出现的最后一行,如下图:代码如图:......
  • position属性总结
    1.position:relative;相对定位1>不影响元素本身特性(无论区块元素还是内联元素会保留其原本特性)2>不会使元素脱离文档流(元素原本位置会被保留,即改变位置也不会占用新位置)3>没有定位偏移量时对元素无影响(相对于自身原本位置进行偏移)4>提升层级(用z-index样式的值可以改变一......
  • 标签的属性
    img标签标签的属性分类1.自带的属性2.自定义属性<imgsrc="地址"alt="描述信息">src属性:图片的地址1.外链地址2.相对地址alt属性:当图片加载失败后,显示的描述信息width属性:控制图片宽度height属性:控制图片高度ps:二者等比例缩放a标签a:超链接<ahref=""></a>......
  • [C#]LINQ中如何按实体的某个属性去重
    NET[C#]LINQ中如何按实体的某个属性去重后返回不重复的集合?问题描述比如有如下实体集合:Person1:Id=1,Name="Test1"Person2:Id=1,Name="Test1"Person3:Id=2,Name="Test2"如何使用LINQ按Person.Id去重,返回的集合只包含Person1和Person3?方案一创建一个静态扩展......
  • C# 循环对象,获取对象每个属性的名、值、类型
    varcurData=newStudent();foreach(System.Reflection.PropertyInfopincurData.GetType().GetProperties()){if(p.PropertyType.FullName==typeof(decimal).FullName){ls.Add((decimal)p.GetValue(curDat......