当前位置: 首页 > 编程日记 > 正文

python中类的约束和限制对象添加属性

通过__slots__限制对象可添加的属性

class A:__slots__ = ['a', 'b']passa1 = A()
a1.a = 10
print(a1.a)
a1.c = 0    # 只能添加a,b属性添加其他属性就报错

没有约束

class Alipay:def pay(self, money):print('此次消费%s' % money)class QQpay:def pay(self, money):print('此次消费%s' % money)def pay(obj, money):obj.pay(money)

弱约束

class Pay:    # 弱约束def pay(self, money):passclass Alipay(Pay):def pay(self, money):print('此次消费%s' % money)class QQpay(Pay):def pay(self, money):print('此次消费%s' % money)class Wechatpay(Pay):def fuqian(self, money):    # 不规范,不报错print('此次消费%s' % money)# class Wechatpay:
#     def pay(self, money):     #  规范统一
#         print('此次消费%s' % money)def pay(obj, money):obj.pay(money)a1 = Alipay()
q1 = QQpay()
c1 = Wechatpay()
# a1.pay(100)
# q1.pay(200)

pay(a1, 100)
pay(q1, 200)
pay(c1, 300)

强制约束

方法一、若不实现父类方法主动主动抛出异常进行约束

# 这个父类制定了一个约束,规范,子类一定要有pay方法。
class Pay:def pay(self, money):     # 主动抛异常raise Exception('未定义pay方法')class Alipay(Pay):def pay(self, money):print('此次消费%s' % money)class QQpay(Pay):def pay(self, money):print('此次消费%s' % money)class Wechatpay:def pay(self, money):print('此次消费%s' % money)class Unitypay(Pay):def fuqian(self, money):    # 没实现父类方法print('此次消费%s' % money)def pay(obj, money):  # 归一化设计
    obj.pay(money)a1 = Alipay()
q1 = QQpay()
c1 = Wechatpay()
d1 = Unitypay()
# a1.pay(100)
# q1.pay(200)# pay(a1, 100)
# pay(q1, 200)
# pay(c1, 300)
pay(d1, 200)    # 没实现父类方法在此处抛异常

方法二、利用模块,如果子类不实现父类方法在实例化时就报错

from abc import abstractmethod
from abc import ABCMetaclass Pay(metaclass=ABCMeta):   # 抽象类,在实例化就报错@abstractmethod     # 定一个约束,规范,约束子类中一定要有pay方法def pay(self, money):passclass Alipay(Pay):def pay(self, money):print('此次消费%s' % money)class QQpay(Pay):def pay(self, money):print('此次消费%s' % money)class Wechatpay:def pay(self, money):print('此次消费%s' % money)class Unitypay(Pay):def fuqian(self, money):    # 没实现父类方法print('此次消费%s' % money)def pay(obj, money):obj.pay(money)a1 = Alipay()
q1 = QQpay()
c1 = Wechatpay()
d1 = Unitypay()     # 没实现父类方法,实例化时就报错
# a1.pay(100)
# q1.pay(200)# pay(a1, 100)
# pay(q1, 200)
# pay(c1, 300)
pay(d1, 200)

转载于:https://www.cnblogs.com/chen55555/p/10284331.html

相关文章:

CEPH核心理论 相关导图(持续更新)

围绕分布式存储(ceph)绘制的技能图谱可参考分布式存储ceph 技能图谱 相关的原始编辑文件可以从github-mindMapping下载 如有缺失、不足之处欢迎指正 CEPH架构 关于系统架构,这里主要是将CEPH融入操作系统架构之中 且是根据L版本进行绘制的 关于文件系统 &#xff1…

Newtonsoft.Json文件错误

今天,在一个项目中使用signalR,由于项目框架是.net 4.0,所以用signalR1.0版本,signalR使用需要newtonsoft.Json文件,它把原 newtonsoft.Json文件覆盖了,所以程序运行时出现如下错误: “ 未能加载文件或程…

提花原理与计算机,电脑提花袜的设计原理与方法:提花女袜

全电脑单针筒袜机生产提花袜,运用计算机辅助设计系统进行袜子的花型图案及编织程序设计。文章介绍了提花袜的组织结构设计与提花编织原理及花型设计与编辑的方法。   Jacquard hosiery has been produced on the computerized hosiery machine with single cylind…

linux网络虚拟化

地址:http://blog.kghost.info/2013/03/01/linux-network-emulator/安装ip netns命令:#yum instal -y *netns*另附一个地址:http://crpppc19.epfl.ch/cgi-bin/man/man2html?ip-netns8转载于:https://blog.51cto.com/kernal/1540612

Linux内存管理:bufferCache和PageCache

参考文档: https://zhuanlan.zhihu.com/p/42364591 https://zhuanlan.zhihu.com/p/32354613 《深入理解Linux 内核》

mfc 开启指定服务器,用MFC实现消息的发送和接收(含服务器)

《用MFC实现消息的发送和接收(含服务器)》由会员分享,可在线阅读,更多相关《用MFC实现消息的发送和接收(含服务器)(33页珍藏版)》请在人人文库网上搜索。1、精品好资料学习推荐新建WClient工程基于对话框OK,直接Finish界面制作我们需要三个按…

Web Api学习一

接触WebApi读的第一篇文章: ASP.NET Web API(一):使用初探,GET和POST数据 实践过程中,用的Fiddler模拟Post请求时收到的对象总是为空null 解决:将文章中的内容改为了如下: User-Agen…

HTML5十五大新特性

HTML5想必大家都很熟悉了。然而,你能准确地说出HTML5带来了哪些新特性吗?本文总结了HTML5带来的15项你必须知道的新特性。一起来看下:1.新的文档类型 (New Doctype)目前许多网页还在使用XHTML 1.0 并且要在第一行像这样声明文档类型&#xf…

[THUWC2017]随机二分图

题目大意 给一张二分图,有左部点和右部点。 有三种边,第一种是直接从左部点连向右部点,出现概率为50%。 第二种边一组里有两条边,这两条边同时出现或者不出现,概率都是50%。 第三种边一组里有两条边,这两条…

Eclipse问题集锦

1、SDK版本过低的问题。 现象: 更新SDK后,每次进入Eclipse,都会提示说需要23.0.0版本的SDK,当前的22.6.0版本的SDK版本过低;然而,确认更新后,结果却是说没有任何更新的东东。 解决办法&#xff…

渥太华大学计算机硕士课程,渥太华大学计算机工程专业解析

本课程以扎实的传统工程技术为基础,涵盖计算机软硬件设计的多个不同方面,并可对基于微处理器的系统、计算机体系结构、编程概念、实时操作系统、软件工程和机器人技术进行更专业的研究。这个项目提供了多种职业发展途径。强制一年级的课程:化学原理gng11…

博弈最高位POJ 1704(Georgia and Bob-Nim博弈)

新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 Georgia and BobTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 6341 Accepted: 1826Description Georgia and Bob decide to play a self-invented game. Th…

用Python深入理解跳跃表原理及实现

最近看 Redis 的实现原理,其中讲到 Redis 中的有序数据结构是通过跳跃表来进行实现的。第一次听说跳跃表的概念,感到比较新奇,所以查了不少资料。其中,网上有部分文章是按照如下方式描述跳跃表的: 这种描述便于理解&am…

Linux进程管理:进程状态和CPU平均负载

常见的linux进程状态如下: 关于源文件xmid,可以从Mind-Mapping获取 这里借助进程状态来描述一下linux系统中的平均负载的概念 当我们感觉到系统变慢时,通常通过top和uptime命令来了解系统的负载情况 [rootpub-ncpu-ndb0 ~]# uptime21:06:13…

poj2420A Star not a Tree?(模拟退火)

链接 求某一点到其它点距离和最小&#xff0c;求这个和&#xff0c;这个点 为费马点。 做法&#xff1a;模拟退火 1 #include <iostream>2 #include<cstdio>3 #include<cstring>4 #include<algorithm>5 #include<stdlib.h>6 #include<vector&…

刀剑英雄登陆显示服务器繁忙,玩刀剑遇到问题解决方法

以下是目前在内测阶段玩家比较常见的一些问题&#xff0c;希望对大家有所帮助&#xff01;1.如果没有正确安装DX9.0B,可能会造成"执行文件BO.EXE时出错&#xff0c;错误代码:2"或者"错误代码:1157"等错误.一个验证方法就是直接运行Bo.exe文件如果提示"…

实战:一次失败的WEB攻击试验,欢迎高手补充

2019独角兽企业重金招聘Python工程师标准>>> 首先声明&#xff1a;这个文章我描述的是一次比较失败的WEB攻击试验&#xff0c;理论基础是一次在网上看到的一篇关于"慢攻击"的概念&#xff0c;那什么叫慢攻击呢&#xff1f; 在解释这个"慢攻击"概…

十大排序算法 导图总结

以下为我们经常用到的十大典型排序算法导图&#xff0c;很多设计以及优化的思想值得去参考学习 因为代码较多&#xff0c;所以都添加到对应的实现注释中了&#xff0c;相关代码可以从Mind-mapping获取xmind源文件 参考文档: 基数排序 堆排序 希尔排序 https://blog.csdn.net/r…

机器学习问题的十个实例【转】

机器学习是什么&#xff1f;这个问题的答案可以参考权威的机器学习定义&#xff0c;但是实际上&#xff0c;机器学习是由它所解决的问题定义的。因此&#xff0c;理解机器学习最好的方式是观察一些实例。 首先来看一些现实生活中众所周知和理解的机器学习问题的实例&#xff0c…

node项目部署到服务器报错,记一次部署node项目到centos服务器经历

&#xff1a;-}先从网上随便搜了个 contos 安装 node 的教程&#xff0c;大概就是这样。准备命令&#xff1a;yum -y install gcc make gcc-c openssl-devel wget下载源码及解压&#xff1a;编译及安装&#xff1a;cd node-v0.10.26make && make install验证是否安装配…

用shell脚本监控系统

简单的用shell脚本写一个“监控”程序作为思路&#xff0c;大致为&#xff1a;实时检测系统的内存使用率&#xff0c;如果大于阈值那么报警&#xff08;如果有条件可以使用短信接口或者实在不行可以使用邮件通知&#xff09;&#xff0c;并记录到日志文件里&#xff0c;如果小于…

P2480 [SDOI2010]古代猪文 Lucas+CRT合并

\(\color{#0066ff}{ 题目描述 }\) 猪王国的文明源远流长&#xff0c;博大精深。 iPig在大肥猪学校图书馆中查阅资料&#xff0c;得知远古时期猪文文字总个数为N。当然&#xff0c;一种语言如果字数很多&#xff0c;字典也相应会很大。当时的猪王国国王考虑到如果修一本字典&…

Linux进程管理: 多进程编程

多进程编程 mind-Mapping保存有xmind原始文件&#xff0c;可直接获取 无名管道PIPE 命名管道FIFO POSIX共享内存 POSIX消息队列 POSIX信号量 SYS V共享内存 SYS V消息队列 SYS V信号量

关于HtmlAgilityPack解析页面中数据乱码问题

第一种方式&#xff1a;publicstaticHtmlDocument LoadHtmlByUrls(stringurl){HtmlDocument htmldoc;HtmlWeb htmlWeb new HtmlWeb(); //不够完善 此内置方法导致中文乱码//htmlWeb.OverrideEncoding Encoding.UTF8;htmldoc htmlWeb.Load(url);Encoding coding htmldoc.S…

服务器无线网卡驱动程序,在Ubuntu里使用Windows的无线网卡驱动程序的方法教程...

Ubuntu的“帮助和支持”说“Ubuntu支持一种称为NDISWrapper的系统。它可以让你在Ubuntu下使用Windows无线设备驱动程序”。1、准备好无线网卡的Windows驱动程序&#xff0c;我是用for Windows XP的。2、先用有线网络联网&#xff0c;在新立得软件包管理器里安装ndisgtk。或到ht…

绿色版mysql使用方法

一、下载MySQLhttp://www.mysql.org/downloads我下载的是mysql-noinstall-5.0.67-win32.zip 二、安装过程1、解压缩 mysql-noinstall-5.0.67-win32.zip 到一个C盘&#xff0c;重新命名为 MySQL5 。假定MYSQL_HOMEC: MySQL52、编辑mysql的运行配置文件my.ini&#xff0c;如果没有…

C# 栈 、队列的概念

栈&#xff1a; 也是System.Collections下的数据结构 存储依然是Object类型的对象 Stack 名字 new Stack(); Count&#xff1a;实际拥有的元素个数 栈的释放顺序是先进后出&#xff08;后进先出&#xff09; 压栈——Push(object 对象)把这个对象添加到栈的顶部 弹栈——Pop()…

Linux多线程管理: 多线程编程

多线程编程 mind-Mapping保存有一下导图的xmind文件&#xff0c;可直接获取 互斥变量 互斥对象 ptrhead相关接口 条件变量 future异步访问类 async类 promise类 package_task类

codeforces 165B(Burning Midnight Oil)

【题意描述】 本题就是给定代码任务为n行&#xff0c;起始代码书写能力为v行&#xff0c;然后每经过一次除以k&#xff0c;当v变为0时看是否完成代码任务n&#xff1f;并求出最小的v。 【解题思路】 我们可以对v值进行二分&#xff0c;然后确定最后的v值。 【AC代码】 1 #inclu…