课时40:类与对象:一些相关的BIF

目录:

   一、一些相关的BIF

   二、、课时40课后习题及答案

 

********************** 

一、一些相关的BIF

**********************

1、issubclass(class,classinfo)

如果第一个参数(class)是第二个参数(classinfo)的一个子类,则返回True,否则返回False:

(1)一个类被认为是其自身的子类。

(2)classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,则返回True。

(3)在其它情况下,会抛出一个TypeError异常。

>>> class A:pass>>> class B(A):pass>>> issubclass(B,A)
True
>>> issubclass(B,B)
True
>>> issubclass(B,object)#object是所有类的基类
True
>>> class C:pass>>> issubclass(B,C)
False

 

2、isinstance(object,classinfo)

 如果第一个参数(object)是第二个参数(classinfo)的实例对象,则返回True,否则,返回False:

(1)如果object是classinfo的子类的一个实例,也符合条件。

(2)如果第一个参数不是对象,则永远返回False。

(3)classinfo可以是类对象组成的元组,只要object是其中任何一个候选对象的实例,则返回True。

(4)如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError的异常。

>>> issubclass(B,C)
False
>>> b1 = B()
>>> isinstance(b1,B)
True
>>> isinstance(b1,C)
False
>>> isinstance(b1,A)
True
>>> isinstance(b1,(A,B,C))

 

Python提供一下几个BIF用于访问对象的属性。

3、hasattr(object,name)

attr即attribute的缩写,属性的意思。接下来介绍的几个BIF都是跟对象的属性有关系的,例如这个hasattr()的作用就是测试一个对象里是否指定的属性。

第一个参数(object)是对象,第二个参数(name)是属性名(属性的字符串名字),举个例子:

>>> class C:def __init__(self,x=0):self.x = x>>> c1 = C()
>>> hasattr(c1,'x') #注意属性名要用引号括起来
True

 

4、getattr(object,name[,default])

返回对象指定的属性值,如果指定的属性不存在,则返回default(可选参数)的值;若没有设置default参数,则抛出ArttributeError异常。

>>> getattr(c1,'x')
0
>>> getattr(c1,'y')
Traceback (most recent call last):File "<pyshell#29>", line 1, in <module>getattr(c1,'y')
AttributeError: 'C' object has no attribute 'y'

 

5、setattr(object,name,value)

与getattr()对应,setattr()可以设置对象中指定属性的值,如果指定的属性不存在,则会新建属性并赋值。

>>> setattr(c1,'y','FishC')
>>> getattr(c1,'y')
'FishC'

 

6、delattr(object,name)

与setattr()相反,delattr()用于删除对象中指定的属性,如果属性不存在,则抛出ArttributeError异常。

>>> delattr(c1,'y')
>>> delattr(c1,'z')
Traceback (most recent call last):File "<pyshell#35>", line 1, in <module>delattr(c1,'z')
AttributeError: z

 

7、property(fget = None,fset = None,fdel = None,doc = None)

俗话说:条条大路通罗马。同样是完成一件事,Python其实提供了好几种方式供你选择。property()是一个比较奇葩的BIF,它的作用是通过属性来设置属性。说起来有点绕,看一下例子:

class C:def __init__(self,size = 10):self.size = sizedef getSize(self):return self.sizedef setSize(self,value):self.size = valuedef delSize(self):del self.sizex = property(getSize,setSize,delSize)
>>> c1 = C()
>>> c1.getSize()
10
>>> c1.x
10
>>> c1.x = 18
>>> c1.x
18
>>> c1.size
18
>>> c1.getSize()
18
>>> del c1.x
>>> c1.size
Traceback (most recent call last):File "<pyshell#9>", line 1, in <module>c1.size
AttributeError: 'C' object has no attribute 'size'

property()返回一个可以设置属性的属性,当然如何设置属性还是需要人为来写代码。第一个参数是获取属性的方法名(例子中是getSize),第二个参数是设置属性的方法名(例子中是setSize),第三个参数是删除属性的方法名(例子中是delSize)。

property()有什么用呢?举个例子,在上面的例题中,为用户提供setSize方法名来设置size属性,并提供getSize方法名来获取属性。但是有一天你心血来潮,突然像对程序进行大改,就可能把setSize和getSize修改为setXSize和getXSize,那就不得不修改用户调用的接口,这样的体验很不好。

有了property(),所有的问题都迎刃而解了,因为像上边一样,为用户访问size属性只提供了x属性。无论内部怎么改动,只需要相应的修改property()的参数,用户仍然只需要去操作x属性即可,没有任何影响。

很神奇是吧?想知道它是如何工作的?下一章节会讲到。

 

**********************************

二、、课时40课后习题及答案

**********************************

 

 

转载于:https://www.cnblogs.com/DC0307/p/9527216.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio Code搭建NodeJs的开发环境

一、Visual Studio Code搭建NodeJs的开发环境 1.下载安装NodeJs并配置环境变量 可以参考&#xff1a;NodeJs的安装和环境变量配置 2.下载安装 VS Code编辑器 可以参考&#xff1a;VsCode插件整理 3.使用Typings工具配置VS Code 的智能提示 可以参考&#xff1a; VS Code智能提示…

HashMap和Hashtable 线程安全性

HashMap和Hashtable的比较是Java面试中的常见问题&#xff0c;用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题。Hashtable是个过时的集合类&#…

Luogu P1280 Niko的任务【线性dp】By cellur925

Nikonikoni~~ 题目传送门 这是当时学长讲dp的第一道例题&#xff0c;我还上去献了个丑&#xff0c;然鹅学长讲的方法我似董非董(??? 我当时说的怎么设计这道题的状态&#xff0c;但是好像说的是二维&#xff0c;本题数据范围均在10000级别&#xff0c;n肯定会空间炸掉的&…

这项技术竟然一个字也不放过!

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 本文由腾讯云AI中心发表于云社区专栏 摘要&#xff1a;在日常生活工作中&#xff0c;我们难免会遇到一些问题&#xff0c;比如自己辛辛苦苦写完的资料&#xff0c;好不容易打印出来却发现源文件丢了;收集了…

AltiumDesigner17快捷键

画线CtrlW转载于:https://www.cnblogs.com/scrazy/p/9533996.html

Capistrano deploy flow outline

Official flow reference: 点击打开链接 An example flow: Deploy: starting Rbenv ensures that the version we configured on config/deploy.rb is installed and that it can write on disc. Checks git repository Create needed folder tree /var/www App_name Shared Pu…

nginx应用geoip模块,实现不同地区访问不同页面的需求(实践版)

https://www.52os.net/articles/configure-nginx-using-geoip-allow-whitelist.html 搞了几天没有搞定&#xff0c;这篇文章一下子解决了问题&#xff0c;点赞 记得nginx编译时一定要加载geoip这个模块 https://blog.csdn.net/beyond__devil/article/details/52838422 …

GoCD notes

Every task in a job is run as an independent program.Changes made by a task to any of its environment variables will not affect subsequent tasks.Changes made by a task on the file system will be visible to subsequent tasks.

给网页标题添加icon小图标

so easy: 给网页标题添加icon小图标: 直接在html文件的head部分添加下面代码&#xff08;注意href的路径&#xff09;&#xff1a; <link rel"icon" type"image/x-icon" href"../static/images/brand.jpg" />转载于:https://www.cnblogs.c…

百练2815:城堡问题(DFS)

描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # | # # # # # #---#####---#####---#####---# 3 # | | # # # # # #---#########---#####---#---#…

C++实现二叉树的相应操作

1. 二叉树的遍历&#xff1a;先序&#xff08;递归、非递归&#xff09;&#xff0c;中序&#xff08;递归、非递归&#xff09;&#xff0c;后序&#xff08;递归、非递归&#xff09;。 #include <iostream> #include <string> #include <stack>using name…

MAC 修改文件夹以及子文件夹和子文件权限 以及 修改文件夹owner

1. 打开Finder&#xff0c;找到想要修改权限的文件夹&#xff0c;打开文件信息对话框。 两种打开方式&#xff1a; 右击文件夹&#xff0c;选择“get info”。 使用“ctrli”。 在弹出对话框底部的“Sharing&Permission” section可以查看文件夹权限信息&#xff1a;N…

windows中使用scrapyd遇到的问题

1.window下‘scrapyd_deploy’不是内部或外部命令&#xff0c;也不是可运行的程序 在windows上使用scrapyd-client 安装后&#xff0c;并不能使用相应的命令scrapyd-deploy 需要在"C:\Python27\Scripts" 目录下 增加scrapyd-deploy.bat文件 内容填充为&#xff1a; …

MAC 设置$PATH 关闭terminal后就失效 解决方案

1 目标 修改$PATH的值 2 问题 在terminal中修改了$PATH&#xff0c;关闭terminal或者换个terminal就不存在了。具体例子&#xff1a; 2.1 查看$PATH当前值 在terminal中输入 echo $PATH2.2 修改$PATH值 此例将/test/folder 加到$PATH的后面。 在terminal中输入 export …

MAC 更新 PHP 指南 以及 PHP常用命令示例

OS: Mac OS X EI Capitan 当前PHP版本&#xff1a;5.5.30 升级后PHP版本&#xff1a;7.0.11 升级步骤参考&#xff1a;https://coolestguidesontheplanet.com/upgrade-php-on-osx/ 1. 安装新版本PHP&#xff1a; 打开terminal&#xff0c;运行&#xff1a; curl -s http://…

mac 鼓捣php 多版本切换

php-v 和 phpinfo()不一样 1.切换httpd.conf 里面的.so文件 2.sudo vi ~/.zshrc 切换 export PATH"/usr/local/opt/php7.1/bin:$PATH"export PATH"/usr/local/opt/php7.1/sbin:$PATH"#export PATH"/usr/local/opt/php7.0/bin:$PATH"#export PATH…

【刷题】BZOJ 2194 快速傅立叶之二

Description 请计算C[k]sigma(a[i]*b[i-k]) 其中 k < i < n &#xff0c;并且有 n < 10 ^ 5。 a,b中的元素均为小于等于100的非负整数。 Input 第一行一个整数N,接下来N行&#xff0c;第i2..iN-1行&#xff0c;每行两个数&#xff0c;依次表示a[i],b[i] (0 < i …

MAC 安装 Magento2 community edition 详细步骤

花了好几天时间&#xff0c;终于在Mac OS X EI Capitan上成功安装magento2.1.1. 此处详细记录每个步骤&#xff0c;以备未来使用。 参考magento官方指南&#xff1a;(Easy) Install the Magento archive on your server 1. 确保系统满足prerequisite&#xff1a; 建议不要使用…

22_IO_第22天(File、递归)_讲义

今日内容介绍 1、File 2、递归 xmind&#xff1a;下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Eaj9yP5i0x4PiJsZA4StQg 密码&#xff1a;845a 01IO技术概述 * A:IO技术概述* a: Output* 把内存中的数据存储到持久化设备上这个动作称为输出&#xff08;写&a…

MAC PHP7 如何disable xdebug

1. 查看xdebug当前状态是否是enable 打开terminal&#xff0c;输入&#xff1a; php -m | grep xdebugterminal返回xdebug&#xff0c;说明现在xdebug是enable状态。 2.找到php配置文件夹 在terminal中输入&#xff1a; which php 进入php.d文件夹&#xff0c;可以看到exten…