面向进阶补充

一 isinstance(obj,cls)和issubclass(sub,super)

isinstance(obj,cls)检查obj是否是类 cls 的对象

class Foo(object):
    pass

obj = Foo()
print(isinstance(obj, Foo))  #检查obj是否是类Foo的对象
--->True

isinstance(x,list)检查x是否是列表list

x=[]
print(isinstance(x,list))
--->True 

issubclass(sub, super)检查sub类是否是 super 类的派生类

class Foo(object):
    pass

class Bar(Foo):
    pass

print(issubclass(Bar, Foo))  #检查Bar类是否是Foo的派生类
--->True

二 反射

1 反射的概念

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领

域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。

2 python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射) 

四个可以实现自省的函数

下列方法适用于类和对象(一切皆对象,类本身也是一个对象)

2.1 hasattr() 判断属性

hasattr(object,name)判断object中有没有一个name字符串对应的方法或属性

class People:
    country=‘China‘
    def __init__(self,name):
        self.name=name

p=People(‘egon‘)
print(p.__dict__)
--->{‘name‘: ‘egon‘}

print(hasattr(p,‘name‘))        #等同于print(‘name‘ in p.__dict__),检查对象p是否有“name”属性
--->True

print(hasattr(p,‘name1213‘))        #等同于print(‘name1213‘ in p.__dict__),检查对象p是否有“name1213”属性
--->False

print(hasattr(p,‘country‘))         #p.country,相当于查找p下是否有country
--->True

print(People.__dict__)
--->{‘__module__‘: ‘__main__‘, ‘country‘: ‘China‘, ‘__init__‘: <function People.__init__ at 0x0000000002203A60>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘People‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘People‘ objects>, ‘__doc__‘: None}

print(hasattr(People,‘country‘))     #People.country,相当于查找People下是否有country
--->True

print(hasattr(People,‘__init__‘))     #People.__init__,相当于查找People下是否有__init__
--->True

2.2 getattr() 获取属性

getattr(object, name, default=None) 获得对象object的‘name’属性,结果返回object.name的值

  

时间: 2024-08-25 11:17:26

面向进阶补充的相关文章

部分经典IT书籍

[系统,网路管理]1) Learning the Unix Operating System 1565923901 O'reilly/1997-4ed ***强力推荐给想入门unix的网友们!! 就只有薄薄的不到100页,在书局偶然发现....深觉其内容适合初学者 相信只要读它,一个下午就可以了解基本UNIX的操作!! 2) Unix : Visual Quickstart Guide 0201353954 A-W/1998-1ed ***强力推荐给想入门unix的网友们!! 比上面那本大了点,

Bioconductor简介

Bioconductor简介 2012-10-09 ~ ADMIN 源:Bioconductor: open software development for computational biology and bioinformatics,Genome Biology 2004, 5:R80 Bioconductor的产生是计算生物学及生物信息学(computational biology and bioinformatics, CBB)发展的产物,其目的是有效降低CBB的门槛.当前,随着计算

五、SpringBoot—HelloWorld案例

弱弱的补充一下啊,,,上一讲如果个别同学创建完项目之后发现项目pom.xml文件或者项目其他地方报错,你可以安装下图操作: HelloWorld案例: 编写好之后启动项目(贼姬霸简单) 启动成功: 浏览器访问: 进阶补充: 如果我们需要传递参数,返回JSON格式的数据,应该这样操作:重复上一步的操作,给类标识@RestController注解,即可返回JSON格式的信息,如果有参数直接在方法上添加参数的名称,方法的参数名称和url参数名称必须是一一对应的相同的,不然获取的参数值为null,如图所

方法和数组就是这么简单!

第三章 方法和数组 3.1 概述 还记得我们的HelloWorld例程吗?我们现在对于输出语句应该已经很熟悉了,解释: System 是系统类. out 是标准输出对象 println() 是一个方法. 如果我们想要在一个类中实现很多功能,但是如果我们想要,多次使用,某一个功能,显然我们需要重复书写这个功能的代码多次,显然,这是不明智的.所以方法就来拯救我们了. ? 3.1_1方法的基本定义 定义:方法是定义在类中的一段独立的代码块,用来实现某个功能. 其实我们在编程界中更喜欢叫它们为函数,但是

12.Django基础十之Form和ModelForm组件

一 Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确.如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.. Django form组件就实现了上面所述的功能. 总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 普通方式手写注册功能

Django基础十之Form和ModelForm组件

一 Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确.如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.. Django form组件就实现了上面所述的功能. 总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 普通方式手写注册功能

python基础数据类型补充以及编码进阶

01 内容大纲 基础数据类型的补充 数据类型之间的转换 编码的进阶 02 具体内容: 数据类型的补充: str # str :补充的方法练习一遍就行. s1 = 'taiBAi' # capitalize 首字母大写,其余变小写 print(s1.capitalize()) # swapcase 大小写翻转 print(s1.swapcase()) # title 每个单词的首字母大写 msg= 'taibai say3hi' print(msg.title()) s1 = 'barry' #

python基础数据类型补充以及编码的进阶

一. 基础数据类型补充内容 1.1 字符串 字符串咱们之前已经讲了一些非常重要的方法,剩下还有一些方法虽然不是那么重要,但是也算是比较常用,在此给大家在补充一些,需要大家尽量记住. #captalize :首字母大写 #swapcase :大小写翻转 #title :每个单词的首字母大写 #center :内同居中,总长度,空白处填充 #寻找字符串中的元素是否存在 #find :返回的找到的元素的索引,如果找不到返回-1 #index :返回的找到的元素的索引,找不到报错. #captalize

http协议进阶(三)补充:报文首部

一直纠结要不要把关于首部的内容放到上一篇随笔中,毕竟报文中首部内容还是很重要的,之前也介绍过,犹豫良久,觉得写一个补充吧,原谅我有点强迫症...... 之前写的关于报文首部的传送门: 报文首部:http://www.cnblogs.com/imyalost/p/5708445.html 通用首部字段:http://www.cnblogs.com/imyalost/p/5717430.html 请求首部字段:http://www.cnblogs.com/imyalost/p/5726556.htm