Python进阶丨面向对象编程 —— 获取对象信息

获取对象信息

  • 描述

通过一些函数来判断对象的类型,继承关系,以及对象的所有属性和方法

  • type()函数

定义

type()函数如果你只有第一个参数则返回对象的类型,三个参数返回新的类型对象

语法

tpye(object)

返回值

返回对象类型

应用场景:基本类型都可以用type()判断

print(type(123))
# 输出<class 'int').

print(tpye('123')
# 输出<class 'str'>.

如果一个变量指向函数或者类,也可以用tpye()判断

print(type(abs))
# 输出<class 'builtin_function_or_method'>

在if中判断类型,通过对比变量type类型是否相同

number = 123
if type(number) == int:
    print('a is int')
    # 输出:a is int
  • 使用isinstance()

定义

isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()

语法:

isinstance(object, classinfo)

参数:

object - 实例对象
classinfo - 可以是直接或间接类名,基本类型或者由它们组成的元组

返回值

如果对象的类型与参数二(classinfo)的类型相同则返回True,否则返回False

应用场景:

对于class的继承关系来说,使用tpye()很不方便。要判断class的类型,可以使用isinstance()函数


class Animal(object):
    
    def run(self):
        print('Animal is running')

class Cat(Animal):
    
    def run(self):
        print('Cat is running')
        
def run_twice(animal):
    animal.run()
    animal.run()

class Dog(Animal):

     def run(self):
        print('Dog is running fast...')
        
a = Animal()
c = Cat()

print(isinstance(c,Cat))

print(isinstance(c,Animal))

print(isinstance(a,Cat))

继承关系是
object -> Animal -> Cat

输出

True
True
False

能用type()判断的基本类型也可以用isinstance()判断

print(isinstance('123',str))
# 输出:True

print(isinstance(123,int))
# 输出:True

注:总是优先使用isinstance()判断类型,可以将指定类型及其子类"一网打尽"

  • dir()函数

定义:

dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表

语法:

dir([object])

参数

object —— 对象、变量、类型

返回值:

返回模块的属性列表

应用场景:想要获得一个对象的所有属性和方法

print(dir('123'))

输出

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__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__方法返回长度。如果你调用len()函数试图读取一个对象的长度,实际上,在len()函数内部,自动去调用该对象的__len__()方法

print(len('123')=='123'.__len__())
# 输出:True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值