Python笔记9——继承、多态和type、isistance、dir
来源:互联网 发布:手机号码采集器软件 编辑:程序博客网 时间:2024/05/24 23:15
1.当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)
2.判断一个变量是否是某个类型可以用isinstance()判断:isinstance(a,list)判断变量a是否为list类型,返回TRUE或FALSE
3.多态:对于一个变量,我们只需要知道它是Animal类型,无需确切地知道它的子类型,就可以放心地调用run()方法,而具体调用的run()方法是作用在Animal、Dog、Cat还是Tortoise对象上,由运行时该对象的确切类型决定。
4.多态的威力在于:调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保 run() 方法编写正
确,不用管原来的代码是如何调用的。这就是著名的“开闭”原则:
对扩展开放:允许新增Animal子类;
对修改封闭:不需要修改依赖Animal类型的 run_twice() 等函数。
5.用type()函数获取基本类型,该函数会返回type类型。便捷做法是用import types导入types模块。 注意:有一种类型就叫TypeType,所有类型本身的类型就是 TypeType,即: type(int)==type(str)==types.TypeType
6.用isistance()函数判断具有继承关系的class类型,也可以判断变量是否是某些类型中的一种:isinstance('a',(str,unicode))
7.使用dir()函数,获取一个对象的所有属性和方法。使用len()函数调用一个对象的长度。使用lower()函数返回小写的字符
8.上述的函数能够把属性和方法列出来,但是这还不够,配合 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.x
9
>>> hasattr(obj, 'y') # 有属性'y'吗?
False
>>> setattr(obj, 'y', 19) # 设置一个属性'y'
>>> hasattr(obj, 'y') # 有属性'y'吗?
True
>>> getattr(obj, 'y') # 获取属性'y'
19
>>> obj.y # 获取属性'y'
19
如果试图获取不存在的属性,会抛出AttributeError的错误:
>>> getattr(obj, 'z') # 获取属性'z'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'MyObject' object has no attribute 'z'
可以传入一个default参数,如果属性不存在,就返回默认值:
>>> getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404
404
也可以获得对象的方法:
>>> hasattr(obj, 'power') # 有属性'power'吗?
True
>>> getattr(obj, 'power') # 获取属性'power'
<bound method MyObject.power of <__main__.MyObject object at 0x108ca35d0>>
>>> fn = getattr(obj, 'power') # 获取属性'power'并赋值到变量fn
>>> fn # fn指向obj.power
<bound method MyObject.power of <__main__.MyObject object at 0x108ca35d0>>
>>> fn() # 调用fn()与调用obj.power()是一样的
81
9.通过内置的一系列函数,我们可以对任意一个Python对象进行剖析,拿到其内部的数据。要注意的是,只有在不知道对象信息的时候,我们才会去获取对象信息。如果可以直接写:
sum = obj.x + obj.y
就不要写:
sum = getattr(obj, 'x') + getattr(obj, 'y')
2.判断一个变量是否是某个类型可以用isinstance()判断:isinstance(a,list)判断变量a是否为list类型,返回TRUE或FALSE
3.多态:对于一个变量,我们只需要知道它是Animal类型,无需确切地知道它的子类型,就可以放心地调用run()方法,而具体调用的run()方法是作用在Animal、Dog、Cat还是Tortoise对象上,由运行时该对象的确切类型决定。
4.多态的威力在于:调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保 run() 方法编写正
确,不用管原来的代码是如何调用的。这就是著名的“开闭”原则:
对扩展开放:允许新增Animal子类;
对修改封闭:不需要修改依赖Animal类型的 run_twice() 等函数。
5.用type()函数获取基本类型,该函数会返回type类型。便捷做法是用import types导入types模块。 注意:有一种类型就叫TypeType,所有类型本身的类型就是 TypeType,即: type(int)==type(str)==types.TypeType
6.用isistance()函数判断具有继承关系的class类型,也可以判断变量是否是某些类型中的一种:isinstance('a',(str,unicode))
7.使用dir()函数,获取一个对象的所有属性和方法。使用len()函数调用一个对象的长度。使用lower()函数返回小写的字符
8.上述的函数能够把属性和方法列出来,但是这还不够,配合 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.x
9
>>> hasattr(obj, 'y') # 有属性'y'吗?
False
>>> setattr(obj, 'y', 19) # 设置一个属性'y'
>>> hasattr(obj, 'y') # 有属性'y'吗?
True
>>> getattr(obj, 'y') # 获取属性'y'
19
>>> obj.y # 获取属性'y'
19
如果试图获取不存在的属性,会抛出AttributeError的错误:
>>> getattr(obj, 'z') # 获取属性'z'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'MyObject' object has no attribute 'z'
可以传入一个default参数,如果属性不存在,就返回默认值:
>>> getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404
404
也可以获得对象的方法:
>>> hasattr(obj, 'power') # 有属性'power'吗?
True
>>> getattr(obj, 'power') # 获取属性'power'
<bound method MyObject.power of <__main__.MyObject object at 0x108ca35d0>>
>>> fn = getattr(obj, 'power') # 获取属性'power'并赋值到变量fn
>>> fn # fn指向obj.power
<bound method MyObject.power of <__main__.MyObject object at 0x108ca35d0>>
>>> fn() # 调用fn()与调用obj.power()是一样的
81
9.通过内置的一系列函数,我们可以对任意一个Python对象进行剖析,拿到其内部的数据。要注意的是,只有在不知道对象信息的时候,我们才会去获取对象信息。如果可以直接写:
sum = obj.x + obj.y
就不要写:
sum = getattr(obj, 'x') + getattr(obj, 'y')
阅读全文
0 0
- Python笔记9——继承、多态和type、isistance、dir
- python——type isinstance dir
- python入门笔记(Day6)--面向对象,实例,封装,继承多态,dir()
- Python学习 Day 8 继承 多态 Type isinstance dir __slots__
- 【Python】学习笔记——-7.3、继承和多态
- Python的type, str, dir和callable函数
- Python中有用的三个工具:dir, type和help
- Python函数---dir(),help(),type()
- python学习笔记 继承和多态
- Python 继承、多重继承、多态、isinstance判断类型、type()获取变量类型、dir()获取变量的所有属性
- Python dir() 和 __dir__
- Python笔记-类和实例、继承和多态
- 用好Python帮助函数help(),dir(),type()
- Python 的帮助--help、dir、type
- 【Python学习笔记】面向对象编程:继承和多态
- Python基础学习篇—dir()函数
- 学习笔记——system(DIR)
- python学习——继承和多态
- ansible配置文件详解(1)
- ios开发之自定义转场动画
- Ctrlbox Project v2.3项目管理用户手册(四)——操作详解4.1
- caffe学习
- java实现电脑端拨号+播放语音功能
- Python笔记9——继承、多态和type、isistance、dir
- Oracle行转列、列转行的Sql语句总结
- 如何获取设计灵感
- Linux环境下使用Nexus搭建maven私服
- 外观模式
- Layout的存取/布局
- source insight代码自动对齐
- 面向Unity程序员的Android快速上手教程
- AsyncTask 工作原理及线程池