首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Python】面向对象 - 继承 ② ( 子类重写父类成员 | 子类调用父类重名成员 | 子类中使用 父类类名 调用父类成员 | 子类中使用 super 调用父类成员 )

一、子类重写父类成员 1、子类重写父类成员语法 子类 继承 父类的 成员属性 与 成员方法 后 , 如果对 继承的 父类成员 不满意 , 可以 重写 父类成员 ; 成员 属性 和 成员 方法 , 都可以进行重写...重新定义父类的成员即可 ; 在 Python 中 , 不像 Java / Kotlin / Groovy 一样 , 如果子类重写父类成员 , 需要使用 @Override 注解 修饰 ; 2、代码示例...访问父类成员 : 如果需要调用被重写之前的 父类成员 , 则需要使用如下方法 : 方法一 : 使用 父类类名 调用父类成员 ; 调用父类同名成员变量 : 父类类名.成员变量名 调用父类同名成员方法...: 父类类名.成员方法名(self) 方法二 : 使用 super 调用父类成员 ; 调用父类同名成员变量 : super().成员变量名 调用父类同名成员方法 : super().成员方法名(...) 2、代码示例 - 子类中使用 父类类名 调用父类成员 在 Dog 子类中的 make_sound 函数中 , 通过 Animal.name 和 Animal.age 可以调用父类的成员变量 , 打印出来的值为父类的成员变量值

75530

python调用父类方法的三种方式(super调用和父类名调用)

子类调用父类的方法的三种方式:父类名.方法名(self)super(子类名,self).父类方法名()super().父类方法名注意:super()通过子类调用当前父类的方法,super默认会调用第一个父类的方法...都适用) # Master.make_cake(self) # super默认会调用第一个父类的方法(适用于单继承 或者只想使用第一个父类的方法) # 02...未绑定方式使用super()函数,但如果涉及多继承,该函数只能调用第一个直接父类的构造方法。...也就是说,涉及到多继承时,在子类构造函数中,调用第一个父类构造方法的方式有以上两种,而调用其他父类构造方法的方式只能使用未绑定方法。...__init__(self, name)使用未绑定方法调用第一个父类的构造方法 #调用其他父类的构造方法,需要手动给self传值 Animal.

1.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    继承与隐藏:Java中父类成员变量的神秘禁忌

    摘要 在Java中,子类继承了父类的成员变量,但不能直接覆盖(或称为隐藏)父类的成员变量。...本文将探讨这个设计决策的原因,以及如何在子类中正确使用父类的成员变量。 2. 成员变量的继承和隐藏 在Java中,继承是一种允许子类获取父类属性和方法的机制。...通过使用关键字extends,子类可以继承父类的属性和方法,并且可以通过父类的引用来实现多态,即在运行时选择调用子类的方法。 当子类继承父类时,它会继承父类的成员变量。...这个例子展示了继承和隐藏的概念。尽管子类可以在声明中使用相同的名称来隐藏父类的成员变量,但实际上这并不是对父类成员变量的覆盖。...4.1 保护继承的一致性 Java的设计者认为,直接覆盖父类的成员变量可能会导致继承关系的混乱和不一致性。子类通常被视为是父类的扩展,它们应该增加功能而不是完全改变继承的属性。

    66220

    【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 接口 方法 super )

    继承 / 实现 : 子类继承了父类 , 或实现了接口 , 接收了父类的所有操作与属性 , 2 ....子类重写父类方法 : 如果属性 或 方法被子类重写了 , 那么就需要使用 super 关键字调用父类属性或方法 ; 4 . super 关键字调用需要考虑的情况 : ① 常用情况 : 最常用的情况只使用...super 关键字进行简单调用即可 ; ② 子类内部类调用父类 : 如果想要在子类的内部调用父类的成员和方法 , 需要使用 super@子类名称 调用 ; ③ 子类调用不同父类的同名方法 : 如果子类继承的父类...子类选择性调用父类 / 接口方法 : 子类可以继承父类 , 实现多个接口 , 如果父类与接口 , 或者不同的接口之间定义了相同名称的方法 , 那么需要使用 super类名 / 接口名>.方法名() 选择调用指定的...代码示例 : 代码中定义了一个父类 Father , 接口 Build , 父类和接口 都定义了 action 方法 , 子类 Son 继承父类 , 实现 Build 接口 , 子类通过 super 调用父类中的成员或方法

    1.6K10

    Python类变量和成员变量的使用注意点

    之前在用python写一个项目,发现一个很恶心的bug,就是同由一个类生成的两个实例之间的数据竟然会相互影响,这让我非常不解。...后来联想到java的类有类变量也有实例变量,因此翻阅了相关资料,发现python也有类似的类变量和实例变量,比如下面的代码中: class A: x = 0 def __init__(self...明明x和y都是类变量,在第二组print中为什么a.x和b.x一样,但是a.y和b.y就是不一样呢? 想了半天悟了一个道理。。。就是对于python来说,类变量的确是所有类共有的东西。...但是那是在我们用的同一个引用的情况下,比如对于[]对象的append方法就是公用一个类变量了;但是对于赋值语句来说,如果在类中对类变量使用了赋值语句,那么python就会生成一个该对象的副本,以后的操作都是基于这个副本而不会对原来的类对象造成影响...这样就解释的通上面的现象了。 那么为了杜绝自己忘记类变量和实例变量的区别导致本不想公用变量的时候公用了变量,最好的办法就是在每个类中使用变量的时候重新初始化一下,这样就不会导致意外了。

    1.5K30

    【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )

    地方 , 都可以使用 " 公有继承 " 的 派生类 ( 子类 ) 对象 替代 , 该 派生类 ( 子类 ) 得到了 除 构造函数 和 析构函数 之外的 所有 成员变量 和 成员方法 ; 功能完整性 :..." 公有继承 " 的 派生类 ( 子类 ) 本质上 具有 基类 ( 父类 ) 的 完整功能 , 使用 基类 可以解决的问题 , 使用 公有继承派生类 都能解决 ; 特别注意 : " 保护继承 " 和..." 私有继承 " 的 派生类 , 是 不具有 基类 的 完整功能的 , 因为 最终继承 后的派生类 , 无法在 类外部调用 父类的 公有成员 和 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则..." 应用场景 : 直接使用 : 使用 子类对象 作为 父类对象 使用 ; 赋值 : 将 子类对象 赋值给 父类对象 ; 初始化 : 使用 子类对象 为 父类对象 初始化 ; 指针 : 父类指针 指向...或 父类引用 , 此处可以直接传入 子类指针 或 子类引用 ; // 函数接收父类指针类型 // 此处可以传入子类对象的指针 void fun_pointer(Parent* obj) { obj

    30820

    python之子类继承父类时进行初始化的一些问题

    __init__相当于是python类的构造方法,在类进行实例化时被调用,当子类和父类中都存在构造方法时,子类中需要显示调用父类的构造方法 。...加上了私有的属性和方法不能在类外进行访问,同时,子类继承父类的属性和方法时,在子类中也不能够访问父类的私有属性和方法。...__init__() self.school = "一中" def printStudent(self): #子类自己继承了父类的公有属性,直接访问即可...print("在子类中使用父类的共有属性:",self.age) #super()代表父类,可以访问父类的公有方法 #当然如若子类没有重写父类的方法,也可以使用self.test...需要明确的是python中并没有真正意义上的私有修饰符,从以上的代码也可以看出。Python在运行时会将__属性或方法转换成:_类名__属性或方法。通过这种方式就可以访问到类私有属性或方法。

    63550

    深入理解Flutter鸿蒙next版本 中的Widget继承:使用extends获取数据与父类约束

    通过组合和继承Widget,我们可以创建出复杂的UI。本文将详细探讨如何在Flutter中使用extends来继承其他Widget,并在子类中访问父类的build方法以获取数据和约束规范。...当我们定义一个新的Widget类时,通常会继承自Flutter框架中现有的Widget类,比如StatelessWidget或StatefulWidget。...继承StatefulWidget并访问父类的约束接下来,我们将创建一个更复杂的Widget,继承自StatefulWidget,并访问父类的约束与状态。...我们将使用一个计数器示例,演示如何在子类中获取和使用父类数据。...在build方法中,我们通过_count变量显示当前计数,并使用一个按钮来增加计数。3.

    4700

    Python面向对象总结及类与正则表达式

    2.Python面向对象的三大特性 一、继承   面向对象中的继承就是继承的类直接拥有被继承类的属性而不需要在自己的类体中重新再写一遍,其中被继承的类叫做父类、基类,继承的类叫做派生类、子类。...在python3中如果不指定继承哪个类,默认就会继承Object类,而继承了Object类的类就叫做新式类,而在python2中如果不指定继承哪个类也不会默认去继承Object类,而没有继承Object...二、单继承与多继承   在其他语言中只支持单继承即class 类名(父类名),而python支持多继承,用逗号将多个父类隔开即class 类名(父类名1,父类名2,。。。。)  ...,如果既想执行父类中的方法同时在子类中又能定义新功能,就需要先把父类中的这个方法单独继承过来,在python中只能使用父类名.方法名(self,父类的其他参数)的方式,在python3中可以使用super...八、封装   封装就是把类中的属性和方法定义为私有的,方法就是在属性名或方法名前加双下划线,而一旦这样定义了属性或方法名后,python会自动将其转换为_类名__属性名(方法名)的格式,在类的内部调用还是用双下划线加属性名或方法名

    47630

    在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

    一、背景   最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法。...二、测试过程  1.父类代码 1 package com.hafiz.zhang; 2 3 public class Fu 4 { 5 private Integer i ; 6...解决办法为:我们需要使用javac *.java命令来进行运行,因为此时存在继承关系,编译子类的同时也需要先编译父类 2)运行java Zi命令,出现以下错误 ? 这是什么原因呢?...由此我们得出了在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类的方式: 1.使用javac -d . *.java进行编译 2.使用java com.hafiz.Zi(...带包名的类全名)命令进行运行!

    1.6K40

    Python第七章-面向对象高级

    _name = name # name 是特性了, 所以用实例变量存储特性的值的是换个变量名!!!...在面向对象的应用程序设计中, 我们通常不希望这种行为, 因为他们暴露基类的内部实现, 可能导致派生类中的使用的私有名称与基类中使用的相同的私有名称发生冲突. 属性或方法私有后就可以避免这种问题!...3.3 继承的语法和具体实现 继承的语法如下: class 父类名: pass class 子类名(父类名): pass 3.3.1最简单的继承 python 的继承是在类名的后面添加括号,...] object是python为所有对象提供的基类,提供有一些内置的属性和方法,可以使用 dir函数查看 新式类:以object为基类的类,推荐使用 经典类:不以object为基类的类,不推荐使用...为了保证编写的代码能够同时在python 2.x 和python 3.x 运行,在定义类的时候,如果没有父类,建议统一继承自object class 类名(object): pass 四、面向对象三大特性

    38120

    Python学习入门基础 — 第七章 面向对象三大特性、单例设计模式

    Dog 类从 Animal 类派生 3) 继承的传递性 C 类从 B 类继承,B 类又从 A 类继承 那么 C 类就具有 B 类和 A 类的所有属性和方法 子类 拥有 父类 以及 父类的父类 中封装的所有...重写父类方法时,调用 在父类中封装的方法实现 调用父类方法的另外一种方式(知道) 在 Python 2.x 时,如果需要调用父类的方法,还可以使用以下方式: 父类名.方法(self) 这种方式,...目前在 Python 3.x 还支持这种方式 这种方法 不推荐使用,因为一旦 父类发生变化,方法调用位置的 类名 同样需要修改 提示 在开发时,父类名 和 super() 两种方式不要混用 如果使用 当前子类名...多继承 概念 子类 可以拥有 多个父类,并且具有 所有父类 的 属性 和 方法 例如:孩子 会继承自己 父亲 和 母亲 的 特性 语法 class 子类名(父类名1, 父类名2...)...经典类:不以 object 为基类的类,不推荐使用 在 Python 3.x 中定义类时,如果没有指定父类,会 默认使用 object 作为该类的 基类 —— Python 3.x 中定义的类都是

    38920

    Python3快速入门(六)——Pyth

    由于Python中内置变量或函数使用__前后缀,因此,不推荐私有的变量或函数加__前后缀,只加__前缀。 Python作为动态语言,允许类或实例动态增加属性,与类内部的私有的属性并不相同。...Python虽然支持多继承,但Python对多继承的支持的也是有限的。 多继承时,使用super只会调用第一个父类的属性方法,因此,要想调用特定父类的构造器只能显式调用父类名.__init__。...如果父类中有相同的方法名,而在子类使用时未显式指定调用的具体赋类的方法,Python会根据继承顺序从左至右搜索查找父类中是否包含方法。...MRO可以保证多继承情况每个类只出现一次,super().init相对于类名.init,在单继承上用法基本无差,但在多继承上,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次...单继承时,使用super方法,不能全部传递,只能传父类方法所需的参数,否则会报错;多继承时,使用类名.init方法需要把每个父类全部写一遍,而使用super方法只需一条语句便执行全部父类的方法,因此多继承需要全部传参

    1.4K20

    Python面向对象编程Day 25部分

    当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 而,当类显著不同,且较小的类是较大的类所需要的组件时,用组合比较好  类名(参数)  #__init__中需要的参数 派生是衍生新的东西...(第一种含义意义并不大,甚至通常是有害的,因为它使得子类和基类出现强耦合,而程序倡导解耦合;而第二种含义的意义非常重要,叫做接口继承,接口就是方法(一个具体的函数),子类必须实现父类的方法) Python...经典类继承(基类没有任何继承关系,不继承object)(python2):深度优先 新式类继承(python3默认;python2):广度优先 __mro__生成解析顺序元组(经典类没这个方法)  最后一步找的...(不好用,扩展性差,父类变更之后子类需要变更的地方太多)__init__:在子类的__init__中写父类名....__init__(包括self在内参数)  方法:vehicle.run(self)   实例化或对象调用方法时会动到self super().方法(参数,不用传self)不用写父类名了 选课系统 1

    32420

    【python入门到精通】python面向对象三大特点:封装,继承,多态

    这就有了一个新式类和旧式类的概念: 当用到多继承的时候,如果子类中没有想用的方法名或属性名,他会自动回到上面去找。...被继承的那个类称为基类、父类或超类,继承的类叫子类也可以叫做派生类。...类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。...特点: 1、在继承中,基类的构造方法(init()方法)不会被自动调用,需要在子类的构造方法中专门调用。 2、在调用基类的方法时需要加上基类的类名前缀,并带上self参数变量。...在程序中继承是描述事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承自狗,子类可以继承父类的公有属性和公共方法,父类中的私有属性不能被继承

    30920

    python学习笔记(11)python面向对象(二)面向对象的三大特点:封装,继承,多态

    这就有了一个新式类和旧式类的概念: 当用到多继承的时候,如果子类中没有想用的方法名或属性名,他会自动回到上面去找。...被继承的那个类称为基类、父类或超类,继承的类叫子类也可以叫做派生类。...类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。...特点: 1、在继承中,基类的构造方法(init()方法)不会被自动调用,需要在子类的构造方法中专门调用。 2、在调用基类的方法时需要加上基类的类名前缀,并带上self参数变量。...在程序中继承是描述事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承自狗,子类可以继承父类的公有属性和公共方法,父类中的私有属性不能被继承

    45720

    python 类

    super()和init()和new()方法 首先super,我们都知道他的意思是继承父类的含义,但是python中继承父类的实现可以直接再括号中写例如ChildA和childB,这两个是一样的 class...__init__() print ChildA(),ChildB() 但是使用super的好处,是避免了书写父类的名,主要用于多重继承,有降偶的好处 然后是init(),它类似与构造函数,在类创建对象的时候使用...self不是代表类,而是代表的是实例。同时在继承时调用父类的init()方法。 new() 函数只能用于从object继承的新式类。 这里扯一嘴,什么是新式类与旧式类?...,或返回错误,不会运行init(),但是如果不写new,则是默认实现了new,会运行init函数。...如果类比作制造商,new()方法就是前期的原材料购买环节,init()方法就是在有原材料的基础上,加工,初始化商品环节。 类变量和实例变量 类变量就是供类使用的变量,实例变量就是供实例使用的.

    1K30

    Python基础-9 类

    类 类中的概念比较多,初学者掌握面向对象、定义和使用类、单继承、类变量和实例变量即可。迭代器和生成器是Python中迭代利器,推荐掌握。...动态改变顺序是有必要的,因为所有多重继承的情况都会显示出一个或更多的菱形关联(即至少有一个父类可通过多条路径被最底层类所访问)。...为了确保基类不会被访问一次以上,动态算法会用一种特殊方式将搜索顺序线性化, 保留每个类所指定的从左至右的顺序,只调用每个父类一次,并且保持单调(即一个类可以被子类化而不影响其父类的优先顺序)。...python中没有类似java或C++那样用private限定的、只能从内部访问的私有变量。...名称改写有助于让子类重载方法而不破坏类内方法调用。

    36150
    领券