获取对象信息

#当我们调用方法时可能需要传递一个参数,这个参数类型我们知道,但是对于接收参数的方法,就不一定知道是什么参数类型了。我们该如何得知参数类型呢?

#Python为我们提供了以下3种获取对象类型的方法。

1、使用type()函数

#前面已经学过type()函数的使用,基本类型都可以用type()判断,例如:

1 >>> type(123)
2 <class ‘int‘>
3 >>> type(‘abc‘)
4 <class ‘str‘>
5 >>> type(None)
6 <class ‘NoneType‘>

#如果一个变量指向函数或类,用type()函数返回的是什么类型,例如:

 1 #!/usr/bin/python
 2 #-*-coding:UTF-8-*-
 3 #获取对象信息
 4
 5 class Animal(object):
 6     def run(self):
 7         print(‘Animal is running.‘)
 8
 9 class Dog(Animal):
10     def run(slef):
11         print(‘Dog is running.‘)
12
13 dog=Dog
14 print(type(abs))
15 print(type(dog()))

#执行结果如下:

1 D:\Python\workspace\datatime\20171211>python 获取对象信息.py
2 <class ‘builtin_function_or_method‘>
3 <class ‘__main__.Dog‘>

#由输出结果看到,返回的是对应的Class的类型。

#如果我们要在if语句中判断并比较两个变量的type类型是否相同,应如下操作:

 1 >>> type(123)==type(456)
 2 True
 3 >>> type(123)==int
 4 True
 5 >>> type(‘abc‘)==type(‘123‘)
 6 True
 7 >>> type(‘abc‘)==str
 8 True
 9 >>> type(‘abc‘)==type(123)
10 False

#通过操作我们看到,判断基本数据类型可以直接写int、str等。怎么判断一个对象是否是函数呢?

#可以使用types模块中定义的常量,例如:

 1 #!/usr/bin/python
 2 #-*-coding:UTF-8-*-
 3 #获取对象信息
 4
 5 import types
 6 def func():
 7     pass
 8 fn=func
 9 print(type(fn)==types.FunctionType)
10 print(type(abs)==types.BuiltinFunctionType)
11 print(type(lambda x:x)==types.LambdaType)
12 print(type(x for x in range(10))==types.GeneratorType)

#执行结果如下:

1 D:\Python\workspace\datatime\20171211>python 获取对象信息_1.py
2 True
3 True
4 True
5 True

#由执行结果看到,函数的判断方式需要借助types模块的帮助。

2、使用isinstance()函数

#要明确class的继承关系,使用type()很不方便,通过判断class的数据类型确定class的继承关系要方便得多,这个时候可以使用isinstance()函数。

#例如,继承关系是如下形式:

1 object->Animal->Dog

#即Animal继承object、Dog继承Animal。使用isinstance()可以告诉我们一个对象是否是某种类型。

#例如,创建如下两种类型的对象:

 1 #!/usr/bin/python3
 2 #-*-coding:UTF-8-*-
 3 #isinstance()
 4
 5 class Animal(object):
 6     def run(self):
 7         print(‘Animal is running.‘)
 8
 9 class Dog(Animal):
10     def run(self):
11         print(‘Dog is running.‘)
12
13 animal=Animal()
14 dog=Dog()

#对上面两种类型的对象,使用isinstance进行判断:

1 print(isinstance(dog,Dog))

#执行结果如下:

1 D:\Python\workspace\datatime\20171212>python isinstance().py
2 True

#根据输出结果看到,dog是Dog类型,这个没有任何疑问,因为dog变量指向的就是Dog对象。接下来判断Animal类型,使用isinstance判断如下:

1 print(isinstance(dog,Animal))

#执行结果如下:

1 D:\Python\workspace\datatime\20171212>python isinstance().py
2 True

#根据输出结果看到,dog也是Animal类型。由此我们得知:尽管dog是Dog类型,不过由于Dog是从Animal继承下来的,因为Animal类型。可以这么说,isinstance()判断的是一个对象是否为该类型本身,或者是否为该类型继承类的类型。

#我们可以确信,dog还是object类型:

1 print(isinstance(dog,object))

#执行结果如下:

1 D:\Python\workspace\datatime\20171212>python isinstance().py
2 True

#同时确信,实际类型是Dog类型的dog,同时也是Animal类型:

1 print(isinstance(dog,Dog) and isinstance(dog,Animal))

#执行结果如下:

1 D:\Python\workspace\datatime\20171212>python isinstance().py
2 True

#不过Animal不是Dog类型,这个我们前面已经了解了:

1 print(isinstance(Dog,Animal))

#执行结果如下:

1 D:\Python\workspace\datatime\20171212>python isinstance().py
2 False

#能用type()判断的基本类型也可以用isinstance()判断。这个可以自己进行验证。

#isinstance()可以判断一个变量是否为某些类型中的一种,判断变量是否为list或tuple的方法如下:

1 print(isinstance([1,2,3],(list,tuple)))
2 print(isinstance((1,2,3),(list,tuple)))

#执行结果如下:

1 D:\Python\workspace\datatime\20171212>python isinstance().py
2 True
3 True

3、使用dir()

#如果要获取一个对象的所有属性和方法,就可以使用die()函数。dir()函数返回一个字符串的list。例如,获取一个对象的所有属性和方法的方式如下:

1 print(dir(dog))

#执行结果如下:

1 [‘__class__‘, ‘__delattr__‘, ‘__dict__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, ‘__module__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘__weakref__‘, ‘run‘]

#由输出结果看到,str对象包含许多属性和方法。

时间: 2024-10-09 14:25:23

获取对象信息的相关文章

python 获取对象信息

当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: >>> type(123) <type 'int'> >>> type('str') <type 'str'> >>> type(None) <type 'NoneType'> 如果一个变量指向函数或者类,也可以用type()判断: >&

python 之获取对象信息

当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: >>> type(123) <class 'int'> >>> type('str') <class 'str'> >>> type(None) <type(None) 'NoneType'> 如果一个变量指向函数或者类,也可以用type()判

Python 面向对象编程——获取对象信息

1.1   获取对象信息 1.1.1   使用type()判断对象类型 >>> type(123)    --基本数据类型判断 <class 'int'> >>> type('123') <class 'str'> >>> type(abs)    --python内置函数的判断 <class 'builtin_function_or_method'> >>> type(Dog) <class

【Python】[面性对象编程] 获取对象信息,实例属性和类属性

获取对象信息1.使用isinstance()判断class类型2.dir() 返回一个对象的所有属性和方法3.如果试图获取不存在的对象会抛出异常[AttributeError]4.正确利用对象内置函数的例子: def readImage(fp): if hasattr(fp,"read"): return readData(fp) return None 实例属性和类属性1.一句话,Python是动态语言,根据类创建的实例可以任意绑定属性.    注意:实例属性和雷属性的名字要保持不一

python获取对象信息

获取对象信息 拿到一个变量,除了用 isinstance() 判断它是否是某种类型的实例外,还有没有别的方法获取到更多的信息呢? 例如,已有定义: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender class Student(Person): def __init__(self, name, gender, score): super(Student, sel

面向对象编程——获取对象信息(五)

当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()类型: >>> type(123) <class 'int'> >>> type('str') <class 'str'> >>> type(None) <class 'NoneType'> 如果一个变量指向函数或者类,也可以用type()判断: &g

Python day 8(3) 获取对象信息。

一:获取对象信息(对象的类型与方法) 法一: a 基本的数据类型都可以通过type()函数来判断. >>> type(123) <class 'int'> >>> type('str') <class 'str'> >>> type(None) <type(None) 'NoneType'>b 如果一个变量指向函数或者类,也可以用type()判断: >>> type(abs) <class '

python进阶四(类的继承)【4-5 python中获取对象信息】

python中获取对象信息 拿到一个变量,除了用 isinstance() 判断它是否是某种类型的实例外,还有没有别的方法获取到更多的信息呢? 例如,已有定义: 1 class Person(object): 2 def __init__(self, name, gender): 3 self.name = name 4 self.gender = gender 5 6 class Student(Person): 7 def __init__(self, name, gender, score

Java--反射之获取对象信息

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制 在学设计模式的时候,我们看到过一句话:"反射反射,程序员的快乐",当时对这句话没有很深刻的认识,到学习了struts.spring等之后,感觉到反射真是很强大的存在. 我们今天介绍如何通过java的反射,获取对象的信息.需求是这样的:有一个实体,实体里面有多个属性,通过这个实体中有