首页 > 编程语言 >面向对象编程-获取对象信息

面向对象编程-获取对象信息

时间:2023-06-15 15:34:07浏览次数:44  
标签:obj power 对象 type len 获取 面向对象编程 True 属性

获取对象类型

使用type()

type(123)
<class 'int'>
type('str')
<class 'str'>
type(None)
<type(None) 'NoneType'>

type(abs)
<class 'builtin_function_or_method'>
type(a)
<class '__ main__.Animal'>

判断一个对象是否是函数,可以用types中定义的常量:

import types
def fn():
... pass
...
type(fn) == 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

使用isinstance()

若继承关系是:

object -> Animal -> Dog -> Husky

先创建3种类型对象

a = Animal()
d = Dog()
h = Husky()

判断:

isinstance(h, Husky)
True

可以判断某个变量是否为某种类型的一种

isinstance([1, 2, 3], (list, tuple))
True
isinstance((1, 2, 3), (list, tuple))
True

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

使用dir()

若要获取一个对象的所有属性和方法,可以使用dir()函数,它返回一个list

dir('ABC')

['add', 'class',..., 'subclasshook', 'capitalize', 'casefold',..., 'zfill']

调用len()函数获取某个对象那个的长度,实际上在len()函数的内部它自动调用了该对象的__ len__()方法,所以下面代码等价

len('ABC')
3
'ABC'.__ len__()
3

我们自己写的类如果def了一个__ len__()方法,那么也可以用len(myobject)

点击查看代码
 class MyDog(object):
...     def __len__(self):
...         return 100
...
 dog = MyDog()
 len(dog)
100

只获取属性和方法是不够的,还需配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态。

点击查看代码
# 测试该对象的属性
# 有没有xx属性:hasattr
print(hasattr(obj,'x'))
print(obj.x)
print(hasattr(obj,'y'))
# 设置属性:setattr()
setattr(obj,'y','hh')
print(hasattr(obj,'y'))
print(obj.y)
# 获取属性:getattr()
print(getattr(obj,'y'))

运行结果

True
9
False
True
hh
hh

若试图获取不存在的属性:

getattr(obj, 'z') # 获取属性'z'

Traceback (most recent call last):
File "", line 1, in
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 0x10077a6a0>>
>>> fn = getattr(obj, 'power') # 获取属性'power'并赋值到变量fn
>>> fn # fn指向obj.power
<bound method MyObject.power of <__main__.MyObject object at 0x10077a6a0>>
>>> fn() # 调用fn()与调用obj.power()是一样的
81

总结:
上述方法是在我们不知道对象信息时候才会用,比如:

点击查看代码
def readImage(fp):
    if hasattr(fp, 'read'):
        return readData(fp)
    return None

标签:obj,power,对象,type,len,获取,面向对象编程,True,属性
From: https://www.cnblogs.com/luwanzi/p/17483041.html

相关文章

  • 如何寻找 C++ 程序中的大对象?
    问题背景大型应用程序中包含成千上万个C++对象,这些对象大小如何?有没有一些大对象很废?例如,在OceanBase0.4开源版本中Top10的大对象,最大的一个占58MB内存:排序大小类名158,720,304rootserver::ObRootTable2220,163,008updateserver::ObUpdateServerMain320,15......
  • 如何通过Java中的对象值来同步块
    问题有时,我们需要通过变量的值来同步代码块。为了解这个问题,我们将考虑一个简单的银行应用程序,它对客户的每次转账进行以下操作:通过此外部Web服务转移评估现金返还金额(CashBackService)在数据库中执行汇款(AccountService)更新现金返还评估系统中的数据(CashBackService)汇款操作如下:pub......
  • [从jQuery看JavaScript]-数据类型和对象(Type and Object)(一)
    jQuery片段:1.var2.//Willspeedupreferencestowindow,andallowsmungingitsname.3.window=this,4.//Willspeedupreferencestoundefined,andallowsmungingitsname.5.undefined,6.//MapoverjQueryincas......
  • javaScript 对象与数组参考
    javaScript对象与数组参考本文列举了各种JavaScript对象与数组,同时包括对上述每一对象或数组所完成工作的简短描述,以及与其相关的属性方法,以及事件处理程序,还注明了该对象或数组的父对象用户同样可能需要参考OnlineCompanion中的超级文本ObjectHierarchy页面(http://ww......
  • 淘宝接口数据采集获得店铺详情api接口获取源代码调用示例展示
     淘宝店铺详情API接口是阿里巴巴开放平台提供的一种API接口,用于获取指定淘宝店铺的详细信息,如店铺名称、店铺简介、开店时间、主营类目等信息。具体来说,淘宝店铺详情API接口(免费获取调用私信)的作用包括:1.获取店铺基本信息:可以获取店铺名称、描述、卖家主页、好评率等基本信息,帮助......
  • DOM4J 工具类(以对象的方式增加和删除XML元素)
    packagenet.better_best.www.dynamicADPics.utils;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importorg.dom4j.Attribute;......
  • k8s集群根据进程PID获取Pod名称
    简单说明在实际的应用场景中,我们如果看到某个进程资源或服务异常,需要根据这个进程排查到底是哪个服务的Pod,这里我们介绍一种根据PID快速寻找Pod名称的方法。实际操作查看进程PID这里我们以GPU任务为例说明,可以看到占用显卡的任务PID为8241[root@centos~]#nvidia-smiThuJu......
  • 面向对象编程-类和实例
    定义类通过class关键字,类名通常是大写开头的单词,(object)表示这个类从哪个类继承下来,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类点击查看代码classStudent(object):pass创建好类,就可以根据Student类创建出Student的实例,创建实例是通过类名+()实现......
  • 淘宝接口数据采集获得店铺详情api接口获取源代码调用示例展示
    ​ 淘宝店铺详情API接口是阿里巴巴开放平台提供的一种API接口,用于获取指定淘宝店铺的详细信息,如店铺名称、店铺简介、开店时间、主营类目等信息。具体来说,淘宝店铺详情API接口(免费获取调用)的作用包括:1.获取店铺基本信息:可以获取店铺名称、描述、卖家主页、好评率等基本信息,帮......
  • MySQL数据库运维实录--通过MySQL Shell Dump/Load 实现数据库对象的逻辑备份与恢复
    [mysql@node01~]$mysqlshMySQLJS>\connectroot@node01:3306MySQLnode01:3306sslJS>util.dumpInstance('/home/mysql/backup')[mysql@node01~]$scp-rbackup/*node02:/home/mysql/backup/util.dumpInstance的关键特性1,多线程备份。并发线程数由thr......