Python学习札记(三十四) 面向对象编程 Object Oriented Program 5
2017-02-27 21:33
453 查看
参考:获取对象信息
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 8 @property
- Python学习札记(三十五) 面向对象编程 Object Oriented Program 6
- Python学习札记(三十) 面向对象编程 Object Oriented Program 1
- Python学习札记(三十三) 面向对象编程 Object Oriented Program 4
- Python学习札记(三十八) 面向对象编程 Object Oriented Program 9
- Python学习笔记09_面向对象编程Object Oriented Programming
- Python学习札记(三十一) 面向对象编程 Object Oriented Program 2
- Python学习札记(三十二) 面向对象编程 Object Oriented Program 3
- Python学习札记(三十九) 面向对象编程 Object Oriented Program 10
- Python学习札记(三十六) 面向对象编程 Object Oriented Program 7 __slots__
- Python面向对象编程(Object-Oriented)和装饰器(decorator)
- Python学习札记(四十) 面向对象编程 Object Oriented Program 11
- Python Object Oriented Programming (面向对象编程) Generator
- Python学习 面向对象编程
- 面向对象编程(Object Oriented Programming)概念总结及延伸(一)
- Files and Strings(Chapter 10 of Python 3 Object Oriented Programming)
- 面向对象编程(Object Oriented Programming)概念及延伸(三)
- 面向对象编程(Object Oriented Programming)概念及延伸(二)
- When Objects are Alike(Chapter 3 of Python 3 Object Oriented Programming)
- Python3 Object Oriented Programming notes