Why is there no natural syntax for accessing attributes with names not being valid identifiers?
Tim Chase
python.list at tim.thechases.com
Tue Dec 3 20:06:44 EST 2013
On 2013-12-03 15:47, Piotr Dobrogost wrote:
> > The getattr function is meant for when your attribute name is in a
> > variable. Being able to use strings that aren't valid identifiers
> > is a side effect.
>
> Why do you say it's a side effect?
I think random832 is saying that the designed purpose of setattr()
was to dynamically set attributes by name, so they could later be
accessed the traditional way; not designed from the ground-up to
support non-identifier names. But because of the getattr/setattr
machinery (dict key/value pairs), it doesn't prevent you from having
non-identifiers as names as long as you use only the getattr/setattr
method of accessing them.
I see non-traditional-identifiers most frequently in test code where
the globals() dictionary gets injected with various objects for
testing purposes, driven by a table with descriptors. Something like
(untested)
tests = [
dict(desc="Test 1", input=10, expected=42),
dict(desc="Test 2", input=314, expected=159),
]
for test in tests:
test_name = "test_" + test["desc"]
globals()[test_name] = generate_test_function(
test["input"], test["output"])
-tkc
More information about the Python-list
mailing list