What's the difference between built-in func getattr() and normal call of a func of a class

J

Johnny

Hi,

I wonder what is the difference between the built-in function
getattr() and the normal call of a function of a class. Here is the
details:

getattr( object, name[, default])

Return the value of the named attributed of object. name must be a
string. If the string is the name of one of the object's attributes,
the result is the value of that attribute. For example, getattr(x,
'foobar') is equivalent to x.foobar. If the named attribute does not
exist, default is returned if provided, otherwise AttributeError is
raised.

Is that to say the only difference between the two is that no
matter the specific function exists or not the built-in func will
always return a value, but "class.function" will not?
 
D

Diez B. Roggisch

Johnny said:
Hi,

I wonder what is the difference between the built-in function
getattr() and the normal call of a function of a class. Here is the
details:

getattr( object, name[, default])

Return the value of the named attributed of object. name must be a
string. If the string is the name of one of the object's attributes,
the result is the value of that attribute. For example, getattr(x,
'foobar') is equivalent to x.foobar. If the named attribute does not
exist, default is returned if provided, otherwise AttributeError is
raised.

Is that to say the only difference between the two is that no
matter the specific function exists or not the built-in func will
always return a value, but "class.function" will not?

No, it will only return _always_ a value if you provide a default one.
If not, they have the exact same semantics.

What you've got here is something usually called "syntactic sugaring" -
a specialized syntax that performs certain instructions that _could_ be
done by hand - but the concise syntax is (supposedly, and certainly in
this case) easier to read/write/understand.

There are others - e.g. list comprehensions or a < b < c.

Regards,

Diez
 
J

Johnny

Diez said:
No, it will only return _always_ a value if you provide a default one.
If not, they have the exact same semantics.

What you've got here is something usually called "syntactic sugaring" -
a specialized syntax that performs certain instructions that _could_ be
done by hand - but the concise syntax is (supposedly, and certainly in
this case) easier to read/write/understand.

There are others - e.g. list comprehensions or a < b < c.

Regards,

Diez

Cool~
Thanks for showing me the "syntactic sugaring":)
 
R

Robert Kern

Johnny said:
Hi,

I wonder what is the difference between the built-in function
getattr() and the normal call of a function of a class. Here is the
details:

getattr( object, name[, default])

Return the value of the named attributed of object. name must be a
string. If the string is the name of one of the object's attributes,
the result is the value of that attribute. For example, getattr(x,
'foobar') is equivalent to x.foobar. If the named attribute does not
exist, default is returned if provided, otherwise AttributeError is
raised.

Is that to say the only difference between the two is that no
matter the specific function exists or not the built-in func will
always return a value, but "class.function" will not?

No, getattr(object, name) will raise an AttributeError if the attribute
doesn't exist; no value will be returned. When getattr(object, name,
default) is called, then a value will be returned regardless of whether
or not the attribute exists (but possibly something else may go wrong).

In terms of practice, the getattr() form allows you to specify the
attribute at run-time rather than write-time. You can do things like
iterate over a list of attributes.

--
Robert Kern
(e-mail address removed)

"In the fields of hell where the grass grows high
Are the graves of dreams allowed to die."
-- Richard Harter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,733
Messages
2,569,440
Members
44,832
Latest member
GlennSmall

Latest Threads

Top