Python _ setattr _, _ getattr _, _ delattr _, _ call _ usage example, pythongetattr
Getattr
The 'getattr' function is a built-in function and can be obtained by function name.
Copy codeThe Code is as follows:
Value = obj. attribute
Value = getattr (obj, "attribute ")
Use 'getattr 'to implement the factory Mode
Copy codeThe Code is as follows:
# A module supports printing in html, text, xml, and other formats. Different functions are called to implement output in several formats based on the input formate parameters.
Import statsout
Def output (data, format = "text "):
Output_function = getattr (statsout, "output _ % s" % format)
Return output_function (data)
_ Call __
The '_ call _' method is used to call the instance itself:
Copy codeThe Code is as follows:
Class storage (dict ):
# _ Call _ method used to call the instance itself
# Achieve () call results
Def _ call _ (self, key ):
Try:
Return self [key]
Failed t KeyError, k:
Return None
S = storage ()
S ['key'] = 'value'
Print s (key) # call __
_ Getattr __
When reading an attribute from an object, you must first search for the attribute from self. _ dicts _ and then search for it from _ getattr.
Copy codeThe Code is as follows:
Class A (object ):
Def _ init _ (self ):
Self. name = 'from _ dicts __: zdy'
Def _ getattr _ (self, item ):
If item = 'name ':
Return 'from _ getattr __: zdy'
Elif item = 'age ':
Return 26
A = ()
Print a. name # obtained from _ dict _
Print a. age # obtained from _ getattr _
_ Setattr __
The '_ setattr _' function is used to set attributes of an object. You can use the _ setattr _ function in the object to set attributes:
Copy codeThe Code is as follows:
Class A (object ):
Def _ setattr _ (self, * args, ** kwargs ):
Print 'call func set attr'
Return object. _ setattr _ (self, * args, ** kwargs)
_ Delattr __
The '_ delattr _' function is used to delete object attributes:
Copy codeThe Code is as follows:
Class A (object ):
Def _ delattr _ (self, * args, ** kwargs ):
Print 'call func del attr'
Return object. _ delattr _ (self, * args, ** kwargs)
Example
Complete example can refer to Weibo API: http://github.liaoxuefeng.com/sinaweibopy/
Copy codeThe Code is as follows:
Class _ Executable (object ):
Def _ init _ (self, client, method, path ):
Self. _ client = client
Self. _ method = method
Self. _ path = path
#__ Call _ function implementation _ Executable function object is callable
Def _ call _ (self, ** kw ):
Method = _ METHOD_MAP [self. _ method]
If method = _ HTTP_POST and 'pic 'in kw:
Method = _ HTTP_UPLOAD
Return _ http_call ('% s. json' % (self. _ client. api_url, self. _ path), method, self. _ client. access_token, ** kw)
Def _ str _ (self ):
Return '_ Executable (% s)' % (self. _ method, self. _ path)
_ Repr _ = _ str __
Class _ Callable (object ):
Def _ init _ (self, client, name ):
Self. _ client = client
Self. _ name = name
Def _ getattr _ (self, attr ):
If attr = 'get ':
# Initialize the _ Executable object and call the _ init _ function.
Return _ Executable (self. _ client, 'get', self. _ name)
If attr = 'post ':
Return _ Executable (self. _ client, 'post', self. _ name)
Name = '% s/% s' % (self. _ name, attr)
Return _ Callable (self. _ client, name)
Def _ str _ (self ):
Return '_ Callable (% s)' % self. _ name
_ Repr _ = _ str __
The following code snippet exists in the source code:
Copy codeThe Code is as follows:
Class APIClient (object ):
'''
API client using synchronized invocation.
'''
...
Def _ getattr _ (self, attr ):
If '_' in attr:
Return getattr (self. get, attr)
Return _ Callable (self, attr)
Therefore, add the initialization object and call a function as follows:
Copy codeThe Code is as follows:
Client = APIClient (...)
# The _ getattr _ function is called to call the _ call _ function.
Client. something. get ()