Python面向对象-获取对象信息type()、isinstance()、dir()
type()
type()函数用于判断对象类型:
>>> type(11)
<class 'int'>
>>> type('abc')
<class 'str'>
>>> type(None)
<class 'NoneType'>
>>> type(abs)
<class 'builtin_function_or_method'>
>>> type(a)
<class 'list'>
type()返回的是对应class类型。下面是判断两个变量的type类型是否相同:
>>> type(11) == type(22)
True
>>> type('abc') == str
True
>>> type('abc') == type(33)
False
如何判断一个对象是否是函数呢?使用types模块中定义的常量:
>>> import types
>>> def f():
... pass
...
>>> type(f)
<class 'function'>
>>> type(f) == types.FunctionType
True
>>> type(lambda x:x) == types.LambdaType
True
>>> type((x for x in range(10))) == types.GeneratorType
True
isinstance()
如果存在以下继承关系:object->Animal->Dog->Husty
那么,isinstance()可以告诉我们,一个对象是否是某种类型(续用上篇文章的例子):
>>> class Husty(Dog):
... pass
...
>>> a = Animal()
>>> b = Dog()
>>> c = Husty()
>>> isinstance(c,Husty)
True
>>> isinstance(c,Dog)
True
>>> isinstance(c,Animal)
True
>>> isinstance(b,Husty)
False
我们可以说Husty是Husty、Dog、Animal类型的对象,却不能说Dog是Husty的对象。应该不难理解吧。
isinstance()同样可以用来判断基本数据类型,甚至可以判断一个变量是否是某些类型中的一种:
>>> isinstance('abc',str)
True
>>> isinstance(22,int)
True
>>> isinstance([1,2,3,4],(list,tuple))
True
>>> isinstance((1,2,3,4),(list,tuple))
True
dir()
用于获取一个对象的所有方法和属性。返回值是一个包含字符串的list:
>>> dir('abc')
['__add__', '__class__',…… '__hash__', '__init__', '__i
……'isalnum
'isidentifier', 'islower', …… 'translate', 'upper', 'zfill']
其中,类似__xx__的属性和方法都是有特殊用途的。如果调用len()函数视图获取一个对象的长度,其实在len()函数内部会自动去调用该对象的__len__()方法,等价于:
>>> len('abc')
3
>>> 'abc'.__len__()
3
据此,我们自己在定义类的时候,自己写一个__len__()方法,就可以使用len(实例变量)功能:
>>> class MyObj(object):
... def __len__(self):
... return 55
...
>>> obj = MyObj()
>>> len(obj)
55
往往我们仅仅列出属性和方法还是不够的,配合getattr()、setattr()、hasattr(),我们可以直接操作一个对象的状态:
>>> class MyObj(object):
... def __init__(self):
... self.x = 9
... def power(self):
... return self.x * self.x
...
>>> obj = MyObj()
>>> hasattr(obj,'x')
True
>>> obj.x
9
>>> hasattr(obj,'y')
False
>>> setattr(obj,'y',22)
>>> hasattr(obj,'y')
True
>>> obj.y
22
>>> getattr(obj,'y')
22
还可以传入一个默认参数,如果属性不存在,返回默认值:
>>> getattr(obj,'h','该页面不存在')
'该页面不存在'
再来演示如何获得对象的方法:
>>> hasattr(obj,'power')
True
>>> f = getattr(obj,'power')
>>> f
<bound method MyObj.power of <__main__.MyObj object at 0x029FD250>>
>>> f()
81
Python面向对象-获取对象信息type()、isinstance()、dir()的更多相关文章
- python 面向对象五 获取对象信息 type isinstance getattr setattr hasattr
一.type()函数 判断基本数据类型可以直接写int,str等: >>> class Animal(object): ... pass ... >>> type( ...
- python基础——获取对象信息
python基础——获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type( ...
- Python面向对象 -- 继承和多态、获取对象信息、实例属性和类属性
继承和多态 继承的好处: 1,子类可以使用父类的全部功能 2,多态:当子类和父类都存在相同的方法时,子类的方法会覆盖父类的方法,即调用时会调用子类的方法.这就是继承的另一个好处:多态. 多态: 调用方 ...
- python 面向对象编程、获取对象信息
面向对象与面向过程 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0 ...
- python 获取对象信息
当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: >>> ...
- 【Python】[面性对象编程] 获取对象信息,实例属性和类属性
获取对象信息1.使用isinstance()判断class类型2.dir() 返回一个对象的所有属性和方法3.如果试图获取不存在的对象会抛出异常[AttributeError]4.正确利用对象内置函数 ...
- python获取对象信息
获取对象信息 拿到一个变量,除了用 isinstance() 判断它是否是某种类型的实例外,还有没有别的方法获取到更多的信息呢? 例如,已有定义: class Person(object): def ...
- python类的继承和多态,获取对象信息
继承 类的继承机制使得子类可以继承父类中定义的方法,拥有父类的财产,比如有一个Animal的类作为父类,它有一个eat方法: class Animal(object): def __init__(se ...
- python动态获取对象的属性和方法 (转载)
首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sys def foo():pass class Cat(object): def __init__ ...
随机推荐
- day 33 线程锁
Python的GIL锁 - Python内置的一个全局解释器锁,锁的作用就是保证同一时刻一个进程中只有一个线程可以被cpu调度. 为什么有这把GIL锁? 答:Python语言的创始人在开发这门语言时, ...
- 什么鬼,面试官竟然让我用Redis实现一个消息队列!!?
GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 9.4k Star 的 ...
- 利用Spring AOP的通知类型以及创建通知
写在最前端 1.SpringAOP中共有六种通知类型,只要我们自定义一个类实现对应的接口,它们全都是org.springframework.aop包中的. 2.AOP的连接点可以是方法调用.方法调用本 ...
- Spring之junit测试集成
简介 Spring提供spring-test-5.2.1.RELEASE.jar 可以整合junit. 优势:可以简化测试代码(不需要手动创建上下文,即手动创建spring容器) 使用spring和j ...
- wpa_supplicant的移植
解压,进入,使用默认配置文件 cd wpa_supplicant-2.6 cp defconfig .config 修改.config文件,修改部分,根据自己的需要进行这部分的配置 #指定libnl的 ...
- 目标检测 1 : 目标检测中的Anchor详解
咸鱼了半年,年底了,把这半年做的关于目标的检测的内容总结下. 本文主要有两部分: 目标检测中的边框表示 Anchor相关的问题,R-CNN,SSD,YOLO 中的anchor 目标检测中的边框表示 目 ...
- [ch04-05] 梯度下降的三种形式
系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 4.5 梯度下降的三种形式 我们比较一下目前我们用三种方 ...
- 3分钟了解ServiceStage 应用智能化运维【华为云分享】
[摘要] 微服务云应用平台(ServiceStage)是面向企业及开发者的一站式DevOps平台服务,支持基于微服务的应用开发.治理.部署及运维监控的全生命周期管理,并提供大规模容器集群管理及中间件服 ...
- JavaScript&&jQuery创建新节点和操作属性对比
JavaScript创建新节点和操作属性 通过JavaScript原生接口创建节点,在处理上是非常复杂与繁琐的. <!DOCTYPE html> <html lang="e ...
- Gradle+Groovy基础篇
在Java项目中,有两个主要的构建系统:Gradle和Maven.构建系统主要管理潜在的复杂依赖关系并正确编译项目.还可以将已编译的项目以及所有资源和源文件打包到.war或.jar文件中.对于简单的构 ...