Python3:OOP Demo
方便快速回顾Python的OOP语法
######################
# 类的私有专有方法 #
######################
# __init__ : 构造函数,在生成对象时调用
# __del__ : 析构函数,释放对象时使用
# __repr__ : 打印,转换
# __setitem__ : 按照索引赋值
# __getitem__: 按照索引获取值
# __len__: 获得长度
# __cmp__: 比较运算
# __call__: 函数调用
# __add__: 加运算
# __sub__: 减运算
# __mul__: 乘运算
# __div__: 除运算
# __mod__: 求余运算
# __pow__: 乘方 class BaseClass:
"""a Base Class"""
baseName = "BaseName";
def __init__(self,baseName):
self.baseName = baseName;
pass;
def myBaseName(self):
return "[BaseClass.myBaseName]" + self.baseName;
pass;
def myMethod(self):
return '[BaseClass.myMethod] 调用父类方法';
pass;
pass; class ClassName(BaseClass): # 继承
# 多继承:class SubClass(Base1, Base2, Base3):
"""a simple sample of class"""
i = 12345 # 公有属性:public
name = ''
money = 0
__weight = 0 # 私有属性:private,两个下划线开头,声明该属性为私有,不能在类外部被使用或直接访问
def __init__(self,name,money,msg=None):# 构造方法:private,在类实例化时会自动调用
self.data = [0,1];
if type(name).__name__ != 'list':
BaseClass.__init__(self,name); #【调用基类构造方法】
self.name = name;
self.msg = msg;
self.money = money;
self.__weight = 10;
self.__whisper(); #【调用私有方法】
pass;
def fun(self): # 公有方法:public
print(self.__class__); # 类的方法与普通的函数的唯一区别——必须一额外的首参数, 按照惯例它的名称为self
# self:约定俗成的命名,非固定命名;代表类的实例,而非类本身
print(self);
print("[ClassName.fun] 我叫:%s" %(self.name));
return "[ClassName.fun] Hello World";
pass;
def __whisper(self): # 私有方法:private,外部调用将报错
print("[ClassName.__whisper__] 内部悄悄话,外人看不见~");
pass;
def myMethod(self): # 重写:重写父类方法
return '[ClassName.myMethod] 调用子类方法';
def __add__(self,other): # 重写私有专有方法
return ClassName(self.name, self.money + other.money, self.msg + other.msg);
pass;
pass; # use demo obj = ClassName("Johnny",100,"Hi,girl!"); # 实例化对象,且必须满足__init__()方法要求的参数,否则报错
print(obj.i);
print(obj.data);
print(obj.name);
print(obj.msg);
print(obj.fun()); obj2 = ClassName("Johnny",200,"Hi,girl!");
print(obj.money);
print(obj2.money);
print((obj +obj2).money); print(obj.myBaseName()); # 【调用父类方法】
print(obj.myMethod()); # 【调用子类(重写)方法】
print(super(ClassName, obj).myMethod()); # 【调用父类(被重写/覆盖的)方法】
输出:
[ClassName.__whisper__] 内部悄悄话,外人看不见~
12345
[0, 1]
Johnny
Hi,girl!
<class '__main__.ClassName'>
<__main__.ClassName object at 0x000002D2C576EB38>
[ClassName.fun] 我叫:Johnny
[ClassName.fun] Hello World
[ClassName.__whisper__] 内部悄悄话,外人看不见~
100
200
[ClassName.__whisper__] 内部悄悄话,外人看不见~
300
[BaseClass.myBaseName]Johnny
[ClassName.myMethod] 调用子类方法
[BaseClass.myMethod] 调用父类方法
参考文献
null
Python3:OOP Demo的更多相关文章
- python3小demo
总结常用的功能小实例,快速学习并掌握python技能 1.墨迹天气 import requests from lxml.html import etree import json import tim ...
- Python3 与 C# 并发编程之~ 协程篇
3.协程篇¶ 去年微信公众号就陆陆续续发布了,我一直以为博客也汇总同步了,这几天有朋友说一直没找到,遂发现,的确是漏了,所以补上一篇 在线预览:https://github.lesschina.c ...
- Python3基础 __getattr__ 访问不存在的属性时,新增提示功能
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3基础 __delattr__ 在一个属性被删除时的行为
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3基础 __add__,__sub__ 两个类的实例相互加减
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3基础 setattr 设置对象的属性值,如果属性不存在就创建
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3基础 super 子类调用父类的__init__
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3基础 父,子类普通方法重名 子类方法覆盖父类方法
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3基础 isinstance 判断是否为指定类的实例对象
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
随机推荐
- 【English】20190321
Keep in mind记住[kip ɪn maɪnd] maintenance维护[ˈmentənəns] Also Keep in mind that table maintenance use ...
- 一探究竟:Namenode、SecondaryNamenode、NamenodeHA关系
NameNode与Secondary NameNode 很多人都认为,Secondary NameNode是NameNode的备份,是为了防止NameNode的单点失败的,其实并不是在这样.文章Sec ...
- 倒计时js
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- VS 附加到进程 加载“附加进程”弹窗很慢
最近遇到一个问题,点击Ctrl + Alt + P 附加到进程的时候,弹出下图弹窗“附加到进程”很慢. 找了很多原因,后来发现,是因为少安装了一个插件,安装后,弹窗的耗时明显少了. 下载 Win ...
- UVALive - 4287 - Proving Equivalences(强连通分量)
Problem UVALive - 4287 - Proving Equivalences Time Limit: 3000 mSec Problem Description Input Outp ...
- parquet文件 读取 原理
学习一下parquet存储结构 原理 以及使用
- 获取与esp8266连接的客户端的Mac地址 IP 端口 控制停止等问题
两个关键的库 ESP8266WebServer.h WiFiClient.h ESP8266WiFiAP.cpp C:\Users\dongdong\Desktop\Arduino-master\li ...
- 日志切割之Logrotate
1.关于日志切割 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处 ...
- MyCP(课下作业,必做)
MyCP(课下作业,必做) 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2 的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bi ...
- HBase原理分析
宏观架构 HBase从宏观上看只有HMaster.RegionServer和zookeeper三个组件. Master: 负责启动的时候分配Region到具体的RegionServer,执行各种管理操 ...