zoukankan      html  css  js  c++  java
  • 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 selenium 4种常用定位 id,class_name,text,xpath
    python selenium 用索引值定位
    python pycharm 建立新项目时使用上个项目所下载的第三方库方法
  • 原文地址:https://www.cnblogs.com/qq952693358/p/6476423.html
Copyright © 2011-2022 走看看