Python学习札记(三十四) 面向对象编程 Object Oriented Program 5
参考:获取对象信息
NOTE
1.type()函数可以用来判断对象的类型:
>>> type(123)
<class 'int'>
>>> type('ABC')
<class 'str'>
>>> type(None)
<class 'NoneType'>
>>> type(abs)
<class 'builtin_function_or_method'>
如果一个变量指向函数或者类,也可以用type()判断.
也可以用来判断两个变量的类型是否相等:
>>> type(abs)==type(123)
False
>>> type('B')==type('H')
True
判断一个对象是否为函数:
>>> import types
>>> def f():
... pass
...
>>> type(f)==types.FunctionType
True
>>> type(abs)==types.BuiltinFunctionType
True
>>> type(lambda x: x)==types.LambdaType
True
>>> type((x for x in range(10)))==types.GeneratorType
True
2.isinstance():可以用来判断一个对象是否是某一个类的对象
#!/usr/bin/env python3
class Animal(object):
"""docstring for Animal"""
def __init__(self):
self.name = 'animal'
def run(self):
print('animal run')
def getname(self):
print(self.name)
class Dog(Animal):
"""docstring for Dog"""
def __init__(self):
self.name = 'Dog'
def run(self):
print('dog run')
def getname(self):
print(self.name)
def main():
a = Animal()
b = Dog()
if isinstance(a, Animal):
print('a is animal')
if isinstance(b, Animal):
print('b is animal')
if isinstance(a, Dog):
print('a is dog')
if isinstance(b, Dog):
print('b is dog')
if __name__ == '__main__':
main()
sh-3.2# ./oop5.py
a is animal
b is animal
b is dog
能够用type()函数判断的类型,也可以用isinstance()判断。
3.如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list:
>>> dir('A')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__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中都是有特殊用途的,比如__len__方法返回长度。在Python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法。
len('ABC') <=> 'ABC'.__len__()
4.配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态.
#!/usr/bin/env python3
class MyClass(object):
"""docstring for MyClass"""
def __init__(self, name):
super(MyClass, self).__init__()
self.name = name
def getname(self):
print(self.name)
def main():
me = MyClass('chen')
me.getname()
# get object attribute
if hasattr(me, 'name'):
print('me have attr name')
getattr(me, 'name')
if hasattr(me, 'age'):
print('me have attr age')
getattr(me, 'age')
print('first judge finished')
setattr(me, 'age', 20)
if hasattr(me, 'age'):
print('me have attr age')
getattr(me, 'age')
print('second judge finished')
# get object function
f = getattr(me, 'getname')
f()
if __name__ == '__main__':
main()
注意,在这三个函数中,提供的均为属性名称。
sh-3.2# ./oop6.py
chen
me have attr name
first judge finished
me have attr age
second judge finished
chen
2017/2/27
Python学习札记(三十四) 面向对象编程 Object Oriented Program 5的更多相关文章
- Python学习札记(三十九) 面向对象编程 Object Oriented Program 10
参考:使用枚举类 NOTE #!/usr/bin/env python3 from enum import Enum def main(): Mouth = Enum('Mouth', ('Jan', ...
- Python学习札记(三十八) 面向对象编程 Object Oriented Program 9
参考:多重继承 NOTE #!/usr/bin/env python3 class Animal(object): def __init__(self, name): self.name = name ...
- Python学习札记(三十六) 面向对象编程 Object Oriented Program 7 __slots__
参考:slots NOTE 1.动态语言灵活绑定属性及方法. #!/usr/bin/env python3 class MyClass(object): def __init__(self): pas ...
- Python学习札记(三十五) 面向对象编程 Object Oriented Program 6
参考:实例属性和类属性 NOTE Python是动态语言,根据类创建的实例可以任意绑定属性. class Student(object): def __init__(self, name): self ...
- Python学习札记(三十二) 面向对象编程 Object Oriented Program 3
参考:访问限制 NOTE 1.eg. #!/usr/bin/env python3 class Student(object): """docstring for Stu ...
- Python学习札记(二十四) 函数式编程5 返回函数
参考:返回函数 NOTE 1.高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. eg.求和函数 #!/usr/bin/env python3 def calsums(*args): a ...
- Python学习札记(三十) 面向对象编程 Object Oriented Program 1
参考:OOP NOTE 1.面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. ...
- Python学习札记(四十) 面向对象编程 Object Oriented Program 11
参考:使用元类 NOTE: type() 1.type()函数可以用于检查一个类或者变量的类型. #!/usr/bin/env python3 class Myclass(object): " ...
- Python学习札记(三十七) 面向对象编程 Object Oriented Program 8 @property
参考:@property NOTE 1.在绑定参数时,为了避免对属性不符合逻辑的操作,需要对传入的参数进行审核. #!/usr/bin/env python3 class MyClass(object ...
随机推荐
- 使用springBoot进行快速开发
springBoot项目是spring的一个子项目,使用约定由于配置的思想省去了以往在开发过程中许多的配置工作(其实使用springBoot并不是零配置,只是使用了注解完全省去了XML文件的配置),达 ...
- [C/C++] String Reverse 字符串 反转
#include <iostream> #include <string> #include <algorithm> #include <cstring> ...
- iOS 根据经纬度计算与地理北极夹角
http://www.aiuxian.com/article/p-2767848.html #define toDeg(X) (X*180.0/M_PI) /** * @method 根据两点经纬度 ...
- Thinkphp上传图片
上传图片的HTML结构: <form action="{:U('Config/addImg')}" enctype="multipart/form-data&quo ...
- Java开发环境的搭建(jdk,eclipse)
一.java 开发环境的搭建 这里主要说的是在windows 环境下怎么配置环境. 1.首先安装JDK java的sdk简称JDK ,去其官方网站下载最近的JDK即可. http://www.orac ...
- Service学习笔记
一 什么是Service Service作为安卓四大组件之一,拥有重要的地位.Service和Activity级别相同,只是没有界面,是运行于后台的服务.这个运行“后台”是指不可见,不是指在后台线程中 ...
- Django之urls.py详解
urls.py:URL分发器(路由配置文件)URL配置(URLconf)就像是Django所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表.你就是以这种方式告诉Dj ...
- Django 的 Form组件
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Form类的使用: 1.定义规则: from ...
- vue.js(一)
之前看过一点vue.js但是知识点没做记录,现在也差不多不记得了,今天把以前看过的翻一遍,顺便提炼一下知识点 注意:下面的所有与vue相关的标签.指令都是写在id="app"的di ...
- linux下的进程,子进程,线程
1.相同点:(a)二者都具有ID,一组寄存器,状态,优先级以及所要遵循的调度策略.(b) 每个进程都有一个进程控制块,线程也拥有一个线程控制块.(c) 线程和子进程共享父进程中的资源:线程和子进程独立 ...