遍历输出对象的属性值

在我们写Python代码时,有时候想看看一个对象所有属性(或方法),这个很简单,通过调用内置方法 dir( ) 就可以搞定,但是如果我们除了想知道其具有的属性(或方法),还想知道在对象该属性下的值呢,上个例子代码:

import numpy as np
from sklearn.linear_model import LinearRegression

x = np.random.randn(1000,5)
y = np.random.randn(1000)

lr = LinearRegression()
lr.fit(x,y)
print lr.score(x,y)

通过dir(lr) ,可以得到对象lr的所有属性(或方法):

dir(lr)

['__abstractmethods__', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_abc_cache', '_abc_negative_cache', '_abc_negative_cache_version', '_abc_registry', '_center_data', '_decision_function', '_estimator_type', '_get_param_names', '_residues', '_set_intercept', 'coef_', 'copy_X', 'decision_function', 'fit', 'fit_intercept', 'get_params', 'intercept_', 'n_jobs', 'normalize', 'predict', 'rank_', 'residues_', 'score', 'set_params', 'singular_']

方法1:

通过 eval() 方法就可以得到 lr 的所有属性值了:

for attr in dir(lr):
    if '_' not in attr:
        print eval('lr.%s'%attr)

方法2:

for attr in dir(lr):
    if '_' not in attr:
        print getattr(lr, attr)

两个的输出都是:

<bound method LinearRegression.fit of LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)>
False
<bound method LinearRegression.predict of LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)>
<bound method LinearRegression.score of LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)>

至于eval()的使用可以参考:http://www.cnblogs.com/yyds/p/6276746.html?utm_source=itdadao&utm_medium=referral ,这个讲的蛮好的。

如果想把里面的函数方法也给输出可以试试这个:

import datetime

now = datetime.datetime.now()

for method in dir(now):
    if '_' not in method:
        if not  hasattr(getattr(now, str(method)),'__call__'):
            print '%s: %s'%(method,getattr(now, str(method)))
        elif hasattr(getattr(now, str(method)), '__call__'):
            try:
                print method, getattr(now, str(method))()
            except:
                pass

输出为:

astimezone combine ctime Mon Apr 24 18:28:12 2017
date 2017-04-24
day: 24
dst None
fromordinal fromtimestamp hour: 18
isocalendar (2017, 17, 1)
isoformat 2017-04-24T18:28:12.514000
isoweekday 1
max: 9999-12-31 23:59:59.999999
microsecond: 514000
min: 0001-01-01 00:00:00
minute: 28
month: 4
now 2017-04-24 18:28:12.515000
replace 2017-04-24 18:28:12.514000
resolution: 0:00:00.000001
second: 12
strftime strptime time 18:28:12.514000
timetuple time.struct_time(tm_year=2017, tm_mon=4, tm_mday=24, tm_hour=18, tm_min=28, tm_sec=12, tm_wday=0, tm_yday=114, tm_isdst=-1)
timetz 18:28:12.514000
today 2017-04-24 18:28:12.516000
toordinal 736443
tzinfo: None
tzname None
utcfromtimestamp utcnow 2017-04-24 10:28:12.516000
utcoffset None
utctimetuple time.struct_time(tm_year=2017, tm_mon=4, tm_mday=24, tm_hour=18, tm_min=28, tm_sec=12, tm_wday=0, tm_yday=114, tm_isdst=0)
weekday 0
year: 2017


判断函数的方法 :

callable(f)  #1

import types #2 这个不是太好使,目前还没用对,只是据说这个法子可用

isinstance(fn, types.FunctionType)

hasattr(fn, '__call__') #3

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,可以使用反射机制来遍历对象属性。首先,通过调用`getClass()`方法获取目标对象的类。然后,使用`getDeclaredFields()`方法获取类中所有声明的字段,包括私有字段。接下来,通过遍历字段数组,可以获取每个字段的名称和。可以使用`field.getName()`方法获取字段的名称,使用`field.get()`方法获取字段的。需要注意的是,如果字段是私有的,需要先调用`field.setAccessible(true)`来设置访问权限。最后,可以进行自定义的操作。以下是一个示例代码: ```java try { Field\[\] fields = voucher.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String value = field.get(voucher).toString(); String name = field.getName(); // 其他自定义操作 } } catch (Exception ex) { // 处理异常 } ``` 这段代码会遍历目标对象`voucher`的所有属性,并输出每个属性的名称和。你可以根据需要进行进一步的操作。 #### 引用[.reference_title] - *1* *3* [Java如何遍历获取对象中的所有属性](https://blog.csdn.net/m0_46330462/article/details/116560911)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [java中遍历一个对象的所有属性](https://blog.csdn.net/caihongshijie6/article/details/8796451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值