python 语法 内置函数 hasattr getattr setattr dir

参考: https://docs.python.org/3/library/functions.html?highlight=hasattr#getattr

例子1:针对类TestA 做属性操作

class TestA:
    def fun_1(self):
        print "fun_1"

    def fun_2(self):
        print "fun_2"

def fun_2():
    print "fun_3"

test_a = TestA()
print hasattr(test_a, "fun_1")

fun_a = getattr(test_a,"fun_2")
print fun_a
fun_a()

setattr(test_a,"fun_2",fun_2) #对原有函数进行了覆盖。热更新代码常用
test_a.fun_2()
print dir(TestA)

  结果:

True
<bound method TestA.fun_2 of <__main__.TestA instance at 0x0000000002E70E88>>
fun_2
fun_3
[‘__doc__‘, ‘__module__‘, ‘fun_1‘, ‘fun_2‘]

  

例子2:针对一个文件内的属性进行条件筛选:

首先创建新测试文件test_file.py:

A="a.b"
class B:
    def fun_1(self):
        pass
C=[1,2]
D="png.a"
E="cc.ee"

然后对文件进行逻辑处理:

# coding=utf-8

import test_file

# 删选出test_file中所有的str、内有.、不含有png的
str_list = []
for item in dir(test_file):  # 查询文件下的属性名
    value = getattr(test_file, item)  # 查询属性名的具体值
    if type(value) != str:
        continue
    if value.find(‘.‘) < 0 or value.find(‘png‘) >= 0:
        continue
    str_list.append(value)

for item in str_list:
    print item

结果:

a.b
cc.ee

总结:

setattr(objectnamevalue)

This is the counterpart of getattr(). The arguments are an object, a string and an arbitrary value. The string may name an existing attribute or a new attribute. The function assigns the value to the attribute, provided the object allows it. For example, setattr(x, ‘foobar‘, 123) is equivalent to x.foobar = 123.

setattr会进行属性覆盖,代码热更可以使用。

dir([object])

Without arguments, return the list of names in the current local scope. With an argument, attempt to return a list of valid attributes for that object.

If the object has a method named __dir__(), this method will be called and must return the list of attributes. This allows objects that implement a custom __getattr__() or __getattribute__() function to customize the way dir() reports their attributes.

If the object does not provide __dir__(), the function tries its best to gather information from the object’s __dict__ attribute, if defined, and from its type object. The resulting list is not necessarily complete, and may be inaccurate when the object has a custom __getattr__().

The default dir() mechanism behaves differently with different types of objects, as it attempts to produce the most relevant, rather than complete, information:

  • If the object is a module object, the list contains the names of the module’s attributes.
  • If the object is a type or class object, the list contains the names of its attributes, and recursively of the attributes of its bases.
  • Otherwise, the list contains the object’s attributes’ names, the names of its class’s attributes, and recursively of the attributes of its class’s base classes.

The resulting list is sorted alphabetically. For example:

>>>

>>> import struct
>>> dir()   # show the names in the module namespace
[‘__builtins__‘, ‘__name__‘, ‘struct‘]
>>> dir(struct)   # show the names in the struct module
[‘Struct‘, ‘__all__‘, ‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘,
 ‘__initializing__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘,
 ‘_clearcache‘, ‘calcsize‘, ‘error‘, ‘pack‘, ‘pack_into‘,
 ‘unpack‘, ‘unpack_from‘]
>>> class Shape:
...     def __dir__(self):
...         return [‘area‘, ‘perimeter‘, ‘location‘]
>>> s = Shape()
>>> dir(s)
[‘area‘, ‘location‘, ‘perimeter‘]

Note

Because dir() is supplied primarily(首要的) as a convenience for use at an interactive prompt(敏捷交互?), it tries to supply an interesting set of names more than it tries to supply a rigorously or consistently defined set of names, and its detailed behavior may change across releases. For example, metaclass attributes are not in the result list when the argument is a class.

dir返回有意义的属性集合,而不是所有属性

原文地址:https://www.cnblogs.com/sun-shadow/p/9712031.html

时间: 2024-10-08 14:18:57

python 语法 内置函数 hasattr getattr setattr dir的相关文章

python内置函数--- hasattr、setattr、getattr

1.描述 hasattr() 函数用于判断对象是否包含对应的属性. 语法 hasattr 语法: hasattr(object, name) 2.描述 setattr() 函数对应函数 getattr(),用于设置属性值,该属性不一定是存在的. 语法 setattr() 语法: setattr(object, name, value) 参数 object -- 对象. name -- 字符串,对象属性. value -- 属性值.   3.描述 getattr() 函数用于返回一个对象属性值.

Python 常用内置函数

abs 取绝对值 print(abs(-1)) #结果1 all(...) all(iterable) -> bool Return True if bool(x) is True for all values x in the iterable. If the iterable is empty, return True. 如果iterable的所有元素不为0.''.False或者iterable为空,all(iterable)返回True,否则返回False:函数等价于: 1 def all

python D13 内置函数

# 1.内置函数# 什么是内置函数? 就是python给你提供的. 拿来直接?的函数, 比如print., input等等. 截?# 到python版本3.6.2 python?共提供了68个内置函数. 他们就是python直接提供给我们的. 有# ?些我们已经?过了. 有?些还没有?过. 还有?些需要学完了?向对象才能继续学习的. 今# 天我们就认识?下python的内置函数. # 不熟悉的函数:# eval() 执?字符串类型的代码. 并返回最终结果# print(eval("2+2&quo

Python 集合内置函数大全(非常全!)

Python集合内置函数操作大全 集合(s).方法名 等价符号 方法说明 s.issubset(t) s <= t 子集测试(允许不严格意义上的子集):s 中所有的元素都是 t 的成员   s < t 子集测试(严格意义上):s != t 而且 s 中所有的元素都是 t 的成员 s.issuperset(t) s >= t 超集测试(允许不严格意义上的超集):t 中所有的元素都是 s 的成员   s > t 超集测试(严格意义上):s != t 而且 t 中所有的元素都是 s 的成

python常用内置函数学习(持续更新...)

python常用内置函数学习 一.python常用内置函数有哪些 dir() 二.每个内置函数的作用及具体使用 1.dir()不带参数时返回当前范围内(全局.局部)的变量.方法和定义的类型列表:   带参数A时返回参数的属性.方法的列表,如何该参数A对象有__dir__(),该方法被调用,如果不含有该方法,该方法不会报错,而是尽可能多的收集参数对象A的信息   实例: 不带参数,在分别在文件全局调用和在函数中局部调用dir()   带参数   原文地址:https://www.cnblogs.c

python 常见内置函数setattr、getattr、delattr、setitem、getitem、delitem

常见内置函数 内置函数:在类的内部,特定时机自动触发的函数 示例1:setattr.getattr.delattr class Person: # def __init__(self, name): # self.name = name ? def __setattr__(self, key, value): # 当设置对象成员属性的时,系统会自动调用 print(key, value) self.__dict__[key] = value ? def __getattr__(self, ite

Python基础——内置函数

课前梗概 学到这里,大家是不是在想一个问题,我们之前一直用到的简单语法中会有,iut(),print(),len(),input()…………等等,你们是否想过,我们在使用之前没有做什么定义操作而是自然而然用到了,非常自然,这到底是什么情况?它们到底是什么东西呢? 其实,这些函数都是一个名为 builtins模块已经封装定义好的函数,而且这个模块在安装python环境的时候就默认导入了,所以我们可以直接使用. 这些函数,在python我们也称之为“内置函数”. 内置函数 在python的3.6.2

Python菜鸟之路一:Python基础-内置函数补充

常用内置函数及用法: 1. callable() def callable(i_e_, some_kind_of_function): # real signature unknown; restored from __doc__ """检查对象object是否可调用.如果返回True,object仍然可能调用失败:但如果返回False,调用对象ojbect绝对不会成功 Return whether the object is callable (i.e., some kin

【Python】内置函数清单

Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义.最常见的内置函数是: print("Hello World!") 在Python教程中,我们已经提到下面一些内置函数: 基本数据类型 type() 反过头来看看 dir() help() len() 词典 len() 文本文件的输入输出 open() 循环设计 range() enumerate() zip() 循环对象 iter() 函数对象 map