04 Python的继承、方法重写、super()类、父类私密属性的调用
继承
A类继承B类,A即可获得B类的全部公共属性和方法(包括内置属性和方法)。格式如:class A(B):
class Animal:
def sleep(self):
print("zZZ...") def eat(self):
print("yamiyami...") def run(self):
print("huchihuchi...") class Dog(Animal): #Dog类拥有sleep,eat,run,bark四个方法
def bark(self):
print("汪汪汪")
方法重写
子类有时需要对继承自父类的方法进行修改或重写,这时直接定义一个与需要重写的方法名一样的方法即可,如(接上面的代码):
class xiaotianquan(Dog):
def fly(self):
print("我在飞")
#重写继承自父类的bark()方法
def bark(self):
print("我在叫!我在叫!")
父类方法扩展
有时仅需对父类方法进行扩展无需完全重写,只需在重写方法时加上super().父类方法 即可:
class xiaotianquan(Dog):
#扩展继承自父类的bark()方法
def bark(self):
#继承父类的方法
super().bark() #此时super()即代表父类(此时的父类为Dog)
#需要拓展的代码
print("我在叫!我在叫!")
super类是一个特殊的类,super()代表着一个super类的实例
Python2.x版本调用父类方法(了解,不推荐)
在Python2.x版本中,子类重写或拓展父类方法时,不是使用super()调用,而是使用:父类名.父类方法(self) #注意,self不能省略
class xiaotianquan(Dog):
#扩展继承自父类的bark()方法
def bark(self):
#继承父类的方法
Dog.bark(self) #self不能省略
#需要拓展的代码
print("我在叫!我在叫!")
注意:super().方法名 与 父类名.方法名(self),开发中不能混用,只能使用一种,且推荐super().方法名这种
父类的私有属性和方法的调用
子类无法直接访问父类的私有属性(可以但不推荐),但可以通过父类中的公共方法来调用私有属性和方法:
class A:
def __init__(self):
self.__age = 18 def __fuck(self):
print("你不能搞我") def get_age(self):
return self.__age def force(self):
self.__fuck() class B(A):
def __init__(self):
super().__init__() #非常重要!!没有这行代码就没有继承自父类的_A__age属性
name = "xiaoli" xiaoli = B()
print(xiaoli.get_age())
xiaoli.force()
运行结果:
E:\python3\python3.exe F:/PycharmProjects/project3-class/xh_13_调用父类方法中的私有属性和方法.py
18
你不能搞我 Process finished with exit code 0
04 Python的继承、方法重写、super()类、父类私密属性的调用的更多相关文章
- 20面向对象三特征 之继承 方法重写 super
继承是:多个类有重复内容,把重复内容放到一个新类中,就可以通过extends关键词去让原来的类和新类产生继承关系,子类只能拿到父类一部分信息.通过extends关键词去指明类与类之间的关系,一个父类可 ...
- [修]python普通继承方式和super继承方式
[转]python普通继承方式和super继承方式 原文出自:http://www.360doc.com/content/13/0306/15/9934052_269664772.shtml 原文的错 ...
- 继承自UITableView的类自带tableView属性,不需要在创建该属性,因为父类UITableView已经创建.
继承自UITableView的类自带tableView属性,不需要在创建该属性,因为父类UITableView已经创建. https://www.evernote.com/shard/s227 ...
- 乐字节Java继承|方法重写、super和final关键字
大家好,乐字节的小乐又来了,上一篇是:乐字节Java|JavaBean.继承与权限修饰,也是属于Java继承的,今天继续Java继承. 一. 方法的重写 父类不满足子类的要求,按需改写.注意 方法签名 ...
- Objective-c 类的继承 方法重写 方法重载
一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序. Obje ...
- 【Python】python 普通继承方式和super继承方式
Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递.举一个很常见的例子:>>&g ...
- python 普通继承方式和super继承方式
Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递. 举一个很常见的例子: >> ...
- PHP学习笔记5-类的继承/方法重写
更改Man.php文件名为People.php,加入代码: public function hi(){ return $this->_name.' say hi'; } 新建文件Man.php: ...
- Python 基础之面向对象之类中的方法和与类相关的魔术属性以及反射
一.类中的方法 普通方法: 没有参数,只能类调用绑定方法: (1)绑定到对象(自动传递对象参数) (2)绑定到类(自动传递参数)静态方法: 无论是类还是对象,都能调用的方法#例:class Dog() ...
随机推荐
- RabbitMQ入门学习系列(六) Exchange的Topic类型
快速阅读 介绍exchange的topic类型,和Direct类型相似,但是增加了"."和"#"的匹配.比Direct类型灵活 Topic消息类型 特点是:to ...
- mac安装rust
1.安装 curl https://sh.rustup.rs -sSf | sh 使用brew各种出错,还慢. 2编译 source $HOME/.cargo/env 3.版本查看 rustc --v ...
- css去除图片间隙
问题如下图 把图片转换成块状元素即可 .img{ display: block; } 解决后:
- 如将Myeclipse项目改成Eclipse项目
由于项目需求,需要将原来Myeclipse项目转移到Eclipse中去.搞了半天才搞出来,分享给大家,希望对大家有用. 首先导入一个从Myeclipse导出的项目 然后无法进行tomcat发布. 但是 ...
- Apollo源码打包及部署
1. 通过源码打包 到携程Apollo地址 https://github.com/ctripcorp/apollo 下载Apollo源码,可在源码中进行自定义配置日志路径及端口等,之后打包. 打包完成 ...
- Navicat Premium 12 mysql show error: connection is being used
错误原因:连接数满了. 解决方案:杀掉无用连接,释放资源.
- 产品经理 写SQL
产品经理必备技能:写SQL - 云+社区 - 腾讯云https://cloud.tencent.com/developer/news/3177 产品经理学SQL(一)一个小时上手SQL | 人人都是产 ...
- Java基础 return 退出main方法的示例
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- flutter中的网络请求和下拉刷新上拉加载,toast的案例
添加依赖 pull_to_refresh: ^1.5.6 dio: ^2.1.0 fluttertoast: ^3.0.1 DioUtil import 'package:dio/dio.dart'; ...
- Python3基础 continue while循环示例
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...