1.类的重写

例子:

class parent(object):name = 'parent'age = 100def __init__(self):print('my name is parent')def get_name(self):return self.namedef get_age(self):return self.ageclass child(parent):name = "child"def __init__(self):print('my name is {0}'.format(self.name))def hello(self):print('hello {0}'.format(self.name))a = child()
a.hello()
print(a.get_name())
print(a.get_age())

上面的例子,如果觉得父类的方法不好,想要写个新的方法,

我们在子类中重写get_name的方法,从而把父类的方法顶掉,怎么做呢?

class parent(object):name = 'parent'age = 100def __init__(self):print('my name is parent')def get_name(self):return self.namedef get_age(self):return self.ageclass child(parent):name = "child"def __init__(self):print('my name is {0}'.format(self.name))def hello(self):print('hello {0}'.format(self.name))def get_name(self):print ('nice day!')a = child()
a.hello()
a.get_name()
print(a.get_age())

结果:

my name is child

hello child

nice day!

100

这样就对 类的方法 进行了重写。

另外一种情况,__init__ 在类的初始化的时候,一般情况下不继承,上面parent类和child类里面的两个__init__不互相继承

类的初始化的时候,不管是父类还是子类,初始化的时候,每个类只走自己的__init__;

如果子类在初始化的时候,需要执行父类中的__init__时,怎么操作?

还是那个例子:

class parent(object):name = 'parent'age = 100def __init__(self, address, sex):self.address = addressself.sex = sex   print('my name is parent')def get_name(self):return self.namedef get_age(self):return self.ageclass child(parent):name = "child"def __init__(self):print('my name is {0}'.format(self.name))def hello(self):print('hello {0}'.format(self.name))def get_name(self):print('nice day!')a = child()
a.hello()
a.get_name()
print(a.get_age())

如上例,如果child类想把 parent类中__init__里的address、sex继承过去,用 super() 方法

class parent(object):parent_name = 'parent'age = 100def __init__(self, address, sex):self.address = addressself.sex    = sexprint('my name is parent')def get_name(self):return self.namedef get_age(self):return self.ageclass child(parent):child_name = "child"def __init__(self, address, sex):super(child, self) = __init__(address,sex)print('my name is {0}'.format(self.name))def hello(self):print('hello {0}'.format(self.name))def get_name(self):print('nice day!')

2.类的私有变量和私有方法

在Python中可以通过在属性变量名前加上双下划线定义属性为私有属性

特殊变量命名

1、 _xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如: 当使用“from M import”时,不会将以一个下划线开头的对象引入 。

2、 __xx 双下划线的表示的是私有类型的变量。只能允许这个类本身进行访问了,连子类也不可以用于命名一个类属性(类变量),调用时名字被改变(在类FooBar内部,__boo变成_FooBar__boo,如self._FooBar__boo)

3、 __xx__定义的是特列方法。用户控制的命名空间内的变量或是属性,如init , __import__或是file 。只有当文档有说明时使用,不要自己定义这类变量。 (就是说这些是python内部定义的变量名)

在这里强调说一下私有变量,python默认的成员函数和成员变量都是公开的,没有像其他类似语言的public,private等关键字修饰.但是可以在变量前面加上两个下划线"_",这样的话函数或变量就变成私有的.这是python的私有变量轧压(这个翻译好拗口),英文是(private name mangling.) **情况就是当变量被标记为私有后,在变量的前端插入类名,再类名前添加一个下划线"_",即形成了_ClassName__变量名.**

Python内置类属性

__dict__ : 类的属性(包含一个字典,由类的数据属性组成)

__doc__ :类的文档字符串

__module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)

__bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)

转载于:https://blog.51cto.com/286577399/1979780

19. Python 类的重写   类的私有变量和私有方法相关推荐

  1. python定义私有变量的方法_Python类中的 私有变量和私有方法

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量. 在python中定义私有变量只需要在变 ...

  2. python定义私有变量的方法_Python面向对象程序设计之私有变量,私有方法原理与用法分析...

    本文实例讲述了Python面向对象程序设计之私有变量,私有方法原理与用法.分享给大家供大家参考,具体如下: 私有变量,私有方法:python的私有化是为了规划私有属性,避免非相关的访问[假如!我有老婆 ...

  3. python:私有变量和私有方法

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量. 在python中定义私有变量只需要在变 ...

  4. Python私有变量与私有方法

    python的私有化是为了规划私有属性,避免非相关的访问[假如!我有老婆,你不能直接知道我老婆是谁,你只有问我才会知道,即我的私有属性只有我知道] 在python中定义私有变量和私有方法只需要在变量名 ...

  5. Java的子类可以继承父类的私有变量和私有方法吗?

    答:实际上继承了. 父类的成员变量(包含私有变量)和成员方法地址(包含私有成员方法)都存放在子类对象中.父类的私有变量和私有方法虽然在子类对象中,但是对于子类对象而言是不可见的,无法直接访问和调用,必 ...

  6. java中私有变量和方法_Java 私有变量和私有方法

    作者: Jakob Jenkov 译者:叶文海(yewenhai@gamil.com) 内容索引 访问私有变量 访问私有方法 在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是 Java ...

  7. java定义私有变量_Java Reflection(七):私有变量和私有方法

    在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是Java反射机制可以做到这一点.使用这个功能并不困难,在进行单元测试时这个功能非常有效.本节会向你展示如何使用这个功能. 注意:这个功能只 ...

  8. Object-C 有私有变量?私有方法?

    从object-c 动态编译机制上讲是不存在私有变量和私有方法的.但是如果你不在.h中声明变量和方法在其它地方无法访问这些变量和方法,那么就成了私有的了.私有变量也可以使用@prviter进行修饰. ...

  9. Python中私有变量和私有方法芳

    Python中要想定义的方法或者变量只能在类内部使用不被外部使用,可以在方法和变量前面加两个下划线,让其变为私有方法或私有变量.类外部可以通过 "_类名__私有属性(方法)名" 访 ...

最新文章

  1. python导入模块时的路径疑惑
  2. 保护 ASP.NET 会话状态
  3. fedora 20 PIL
  4. linux18.04下安装的jdk11.0.2
  5. Java如何支持函数式编程?
  6. 【静态页面架构】CSS之颜色与单位
  7. day21 java的日期类
  8. 三块金砖---感晤CIO的人生‏
  9. jieba分词错误_jieba分词处理
  10. 企查查的批量公司查找
  11. 并发编程五:java并发线程池底层原理详解和源码分析
  12. 如何解决安装CCS 10 时 Unicode Character Check 报错
  13. Zabbix 监控MySQL最大连接数
  14. 《区块链技术与应用》北大肖臻老师——课程笔记【4-5】
  15. MacBook M1配置Pytorch
  16. rim lighting
  17. python抓取财务数据_Python与财务「上」——数据采集篇
  18. Oracle的ERP系统中报表不好用?
  19. MIT 6.828 学习笔记4 Lab2实验报告
  20. 通过Java高仿flyme悬浮球设计

热门文章

  1. 学习python可以从事哪些工作_学习Python可以从事哪些工作呢?
  2. 十进制度分秒lisp函数_十进制与度分秒坐标互转
  3. python3虚拟环境不带任何模块_Python3虚拟环境-不存在的包
  4. html文件图标变成白色,win10系统html文件图标变成空白的操作办法
  5. 消防信号总线原理_AFPM100/B消防设备电源监控系统在百色市人民医院消防设备电源监控系统的应用-安科瑞 华梅超...
  6. [Ext JS] 组件浮动一篇通(floating、alignTo)
  7. Extjs弹出框的异步执行
  8. 设置log缓存_全局变量、事件绑定、缓存爆炸?Node.js内存泄漏问题分析
  9. java中new_浅析Java中的 new 关键字
  10. php大文件怎么排序去重,简单实现大文件的排序和去重