自学Python day6--------面向对象编程(获取对象信息)
来源:互联网 发布:淘宝开店能挣钱吗 编辑:程序博客网 时间:2024/06/09 19:15
自学Python day6——–面向对象编程(获取对象信息)
1.使用type()
可以通过使用type()来判断对象的基本类型:
type(123)inttype('str')str
也可以判断函数或者类:
type(abs)builtin_function_or_methodclass Student(object): def __init__(self,name,socre,num): self.name = name self.socre = socre self.num = numa = Student('Jim',22,33)type(a)__main__.Student
也可以比较两个对象的类似是否相同,相同返回Ture,反之False如:
type(321) == type(222)Turetype(333) == intTuretype(222) == tpye('333')False
2.使用isinstance()
而对于class的继承关系可以用isinstance()来判断,若属于同一个类的子类,则返回Ture
class Ball(object): def __inti__(self,name,num): self.name = name self.num = numclass Football(Ball): def __inti__(self,name,num): self.name = name self.num = numclass socre(Ball): def __inti__(self,name,num): self.name = name self.num = numa = Ball()b = Football()c = socre()isinstance(a,Ball)Trueisinstance(b,Ball)Trueisinstance(c,Ball)True
isinstance还可以判断一个变量是否是某些类型中的一种,比如下面的代码就可以判断是否是list或者tuple:
isinstance([1, 2, 3], (list, tuple))Trueisinstance((1, 2, 3), (list, tuple))Truedir('ABD')
3.使用dir()
如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法:
dir(‘ABC’)
类似xxx的属性和方法在Python中都是有特殊用途的,比如len方法返回长度。在Python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的len()方法,所以,下面的代码是等价的:
len('AB')2'AB'.__len__()2 class MyDog(object):... def __len__(self):... return 100... dog = MyDog() len(dog)100
剩下的都是普通属性或方法,比如lower()返回小写的字符串:
‘ABC’.lower()
‘abc’
仅仅把属性和方法列出来是不够的,配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态:
>>> class MyObject(object):... def __init__(self):... self.x = 9... def power(self):... return self.x * self.x...>>> obj = MyObject()>>> hasattr(obj, 'x') # 有属性'x'吗?True>>> obj.x9>>> hasattr(obj, 'y') # 有属性'y'吗?False>>> setattr(obj, 'y', 19) # 设置一个属性'y'>>> hasattr(obj, 'y') # 有属性'y'吗?True>>> getattr(obj, 'y') # 获取属性'y'19>>> obj.y # 获取属性'y'19
一个正确的用法的例子如下:
def readImage(fp): if hasattr(fp, 'read'): return readData(fp) return None
假设我们希望从文件流fp中读取图像,我们首先要判断该fp对象是否存在read方法,如果存在,则该对象是一个流,如果不存在,则无法读取。hasattr()就派上了用场。
请注意,在Python这类动态语言中,根据鸭子类型,有read()方法,不代表该fp对象就是一个文件流,它也可能是网络流,也可能是内存中的一个字节流,但只要read()方法返回的是有效的图像数据,就不影响读取图像的功能。
- 自学Python day6--------面向对象编程(获取对象信息)
- 自学Python day6--------面向对象编程
- 自学Python day6--------面向对象编程(类和实例)
- 自学Python day6--------面向对象编程(访问限制)
- 自学Python day6--------面向对象编程(继承和多态)
- 自学Python day6--------面向对象编程(实例属性和类属性)
- 面向对象(day6)
- 自学 java 笔记 day6(面向对象2)
- 【Python学习笔记】面向对象编程:获取对象信息
- Python自学笔记二、面向对象编程
- Python 面向对象(二)—— 获取对象信息
- day6面向对象2
- Python自学笔记三、面向对象编程2
- DAY6之Python学习笔记:面向对象术语整理
- python面向对象编程
- python 面向对象编程
- python面向对象编程
- python面向对象编程
- 指针与二维数组练习-计算矩阵边缘元素之和(C程序设计进阶 第5周)
- android PopupWindow实现从底部弹出或滑出选择菜单或窗口
- windows下部署免费ssl证书(letsencrypt)
- 指针和const
- 全面了解Nginx到底能做什么
- 自学Python day6--------面向对象编程(获取对象信息)
- 70-设置前台进程组
- CSDN一直都很不错,加油了8
- c++ static的作用,以及static对象在类和函数中区别
- 集成Eclipse和Tomcat时找不到server选项
- 详细的Dagger2+MVP融合,一行一行分析,一点一点进步,之二
- 机房重构之组合查询
- iOS 越狱开发那些事儿之三
- 欢迎使用CSDN-markdown编辑器