- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章深入浅析Python获取对象信息的函数type()、isinstance()、dir()由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
type()函数:
使用type()函数可以判断对象的类型,如果一个变量指向了函数或类,也可以用type判断.
如:
1
2
3
4
5
6
7
8
|
class
student(
object
):
name
=
'student'
a
=
student()
print
(
type
(
123
))
print
(
type
(
'abc'
))
print
(
type
(none))
print
(
type
(
abs
))
print
(
type
(a))
|
运行截图如下:
可以看到返回的是对象的类型.
我们可以在if语句中判断比较两个变量的type类型是否相同.
如:
1
2
3
4
5
|
class
student(
object
):
name
=
'student'
a
=
student()
if
type
(
123
)
=
=
type
(
456
):
print
(
"true"
)
|
输出结果为true.
如果要判断一个对象是否是函数怎么办?
我们可以使用types模块中定义的常量。types模块中提供了四个常量types.functiontype、types.builtinfunctiontype、types.lambdatype、types.generatortype,分别代表函数、内建函数、匿名函数、生成器类型.
1
2
3
4
5
6
7
|
import
types
def
fn():
pass
print
(
type
(fn)
=
=
types.functiontype)
print
(
type
(
abs
)
=
=
types.builtinfunctiontype)
print
(
type
(
lambda
x: x)
=
=
types.lambdatype)
print
(
type
((x
for
x
in
range
(
10
)))
=
=
types.generatortype)
|
isinstance()函数:
对于有继承关系的类,我们要判断该类的类型,可以使用isinstance()函数.
如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class
animal(
object
):
def
run(
self
):
print
(
"动物在跑"
)
class
dog(animal):
def
eat(
self
):
print
(
"狗在吃"
)
class
cat(animal):
def
run(
self
):
print
(
"猫在跑"
)
dog1
=
dog()
cat1
=
cat()
print
(
isinstance
(dog1, dog))
print
(
isinstance
(cat1, cat))
print
(
isinstance
(cat1, animal))
print
(
isinstance
(dog1, animal))
|
运行截图如下:
可以看到子类的实例不仅是子类的类型,也是继承的父类的类型.
也就是说,isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上.
能用type()判断的基本类型也可以用isinstance()判断,并且还可以判断一个变量是否是某些类型中的一种.
如:
1
2
3
4
5
|
print
(
isinstance
(
'a'
,
str
))
print
(
isinstance
(
123
,
int
))
print
(
isinstance
(b
'a'
, bytes))
print
(
isinstance
([
1
,
2
,
3
], (
list
,
tuple
)))
print
(
isinstance
((
1
,
2
,
3
), (
list
,
tuple
)))
|
运行截图如下:
一般情况下,在判断时,我们优先使用isinstance()判断类型.
dir()函数:
如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list.
如,获得一个str对象的所有属性和方法:
print(dir('abc')) 。
运行结果:
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] 。
类似__xxx__的属性和方法在python中都是有特殊用途的。如在python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法,因此下面的代码是等价的:
1
2
|
print
(
len
(
'abc'
))
print
(
'abc'
.__len__())
|
运行截图如下:
我们也可以给自己定义的类写一个__len__()方法.
如:
1
2
3
4
5
|
class
mydog(
object
):
def
__len__(
self
):
return
100
dog1
=
mydog()
print
(
len
(dog1))
|
运行截图如下:
前后没有__的都是普通属性或方法.
我们还可以使用getattr()函数获取属性,setattr()函数设置属性,hasattr()函数查找是否具有某属性.
如:
1
2
3
4
5
6
7
8
9
10
11
|
class
myobject(
object
):
def
__init__(
self
):
self
.x
=
9
def
power(
self
):
return
self
.x
*
self
.x
obj1
=
myobject()
print
(
hasattr
(obj1,
'x'
))
print
(
hasattr
(obj1,
'y'
))
setattr
(obj1,
'y'
,
19
)
print
(
hasattr
(obj1,
'y'
))
print
(
getattr
(obj1,
'y'
))
|
运行截图如下:
如果试图获取不存在的属性,会抛出attributeerror的错误。我们可以传入一个default参数,如果属性不存在,就返回默认值.
getattr()函数、setattr()函数、hasattr()函数也可以用于获得、设置、查找对象的方法.
如:
1
2
3
4
5
6
7
8
9
10
11
|
class
myobject(
object
):
def
__init__(
self
):
self
.x
=
9
def
power(
self
):
return
self
.x
*
self
.x
obj1
=
myobject()
print
(
hasattr
(obj1,
'power'
))
print
(
getattr
(obj1,
'power'
))
fn
=
getattr
(obj1,
'power'
)
print
(fn())
|
运行截图如下:
可以看到调用fn()的结果与调用obj1.power()的结果是一样的.
总结:
通过内置的一系列函数,我们可以对任意一个python对象进行剖析,拿到其内部的数据.
要注意的是,只有在不知道对象信息的时候,我们才会去获取对象信息.
如:
1
2
3
4
|
def
readimage(fp):
if
hasattr
(fp,
'read'
):
return
readdata(fp)
return
none
|
假设我们希望从文件流fp中读取图像,我们首先要判断该fp对象是否存在read方法,如果存在,则该对象是一个流,如果不存在,则无法读取。这样hasattr()就派上了用场.
在python这类动态语言中,根据鸭子类型,有read()方法,不代表该fp对象就是一个文件流,它也可能是网络流,也可能是内存中的一个字节流,但只要read()方法返回的是有效的图像数据,就不影响读取图像的功能.
以上所述是小编给大家介绍的python获取对象信息的函数type()、isinstance()、dir(),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:https://blog.csdn.net/zgcr654321/article/details/82731116 。
最后此篇关于深入浅析Python获取对象信息的函数type()、isinstance()、dir()的文章就讲到这里了,如果你想了解更多关于深入浅析Python获取对象信息的函数type()、isinstance()、dir()的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!