AttributeError in "with" statement (3.2.2)
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Thu Dec 15 02:21:31 EST 2011
On Thu, 15 Dec 2011 05:15:58 +0000, MRAB wrote:
> On 15/12/2011 05:01, Steven D'Aprano wrote:
>> On Wed, 14 Dec 2011 18:13:36 -0500, Terry Reedy wrote:
>>
>>> On 12/14/2011 3:01 AM, Steven D'Aprano wrote:
>>>> On Wed, 14 Dec 2011 01:29:13 -0500, Terry Reedy wrote:
>>>>
>>>>> To complement what Eric says below: The with statement is looking
>>>>> for an instance *method*, which by definition, is a function
>>>>> attribute of a *class* (the class of the context manager) that
>>>>> takes an instance of the class as its first parameter.
>>>>
>>>> I'm not sure that is correct... I don't think that there is anything
>>>> "by definition" about where methods live.
>>>
>>> From the Python glossary:
>>> "method: A function which is defined inside a class body."
>>>
>>> That is actually a bit too narrow, as a function can be added to the
>>> class after it is defined. But the point then is that it is treated
>>> as if defined inside the class body.
>>
>> First off, let me preface this by saying that I'm not necessarily
>> saying that the above glossary definition needs to be changed. For most
>> purposes, it is fine, since *nearly always* methods are created as
>> functions defined inside the class body. But it needs to be understood
>> in context as a simplified, hand-wavy definition which covers 99% of
>> the common cases, and not a precise, definitive technical definition.
>>
>> To give an analogy, it is like defining mammals as "hairy animals which
>> give birth to live young", which is correct for all mammals except for
>> monotremes, which are mammals which lay eggs.
>>
> [snip]
> Or the naked mole-rat. Or cetaceans (whales).
Naked mole-rats and cetaceans do have hair, just not very much of it.
E.g. http://marinelife.about.com/od/cetaceans/f/whaleshair.htm
--
Steven
More information about the Python-list
mailing list