标签:cached ati arp ... sharp nis __name__ test 筛选
参考: 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
(object, name, value)
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:
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返回有意义的属性集合,而不是所有属性
python 语法 内置函数 hasattr getattr setattr dir
标签:cached ati arp ... sharp nis __name__ test 筛选
原文地址:https://www.cnblogs.com/sun-shadow/p/9712031.html