Issue 12077: Harmonizing descriptor protocol documentation (original) (raw)

Created on 2011-05-14 13:56 by davide.rizzo, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (8)

msg135974 - (view)

Author: Davide Rizzo (davide.rizzo) *

Date: 2011-05-14 13:56

There are three sources of information for the descriptor protocol:

A developer who already knows descriptor tipically reads the first one: object.get(self, instance, owner) "... owner is always the owner class ..." Reading a bit further there are the ways a descriptor can be called, and the "direct call" is x.get(a). That is, without the third argument (owner) specified.

The how-to definition is slightly different: descr.get(self, obj, type=None) --> value Here the arguments have different names ("type" shadowing the type bultin) and it seems to be implied that the third argument is optional. The ClassMethod example at the end of the document seems to confirm this: def get(self, obj, klass=None): (though another example doesn't). And the method contains an explicit check on klass being None. Also it could be confusing that through the examples in the same document many different names are used for the same argument (type, objtype, klass), and all different than the name used in the reference.

Lastly the PEP is more explicit: get(): a function callable with one or two arguments. [...] When X is None, the optional second argument, T, should be meta-object. [...] When both X and T are specified ...

One more quirk: the reference explains the distinction between data and non-data descriptors, though says nothing about set raising AttributeError for read-only data descriptors.

My proposal:

msg136172 - (view)

Author: Jay Parlar (Jay.Parlar)

Date: 2011-05-17 18:17

While working on this, I believe it would also make sense to remove all instances of the terms "new-style" and "old-style" from the Descriptor HowTo (and wherever else they might be present)

It still makes sense for them to be present in the 2.7 documentation, but they're concepts that don't exist in 3.x

msg136295 - (view)

Author: Jay Parlar (Jay.Parlar)

Date: 2011-05-19 14:16

Another problem is that the examples and text in the section "Functions and Methods" is no longer correct in 3.x. Namely the the references to unbound methods, and the example showing an unbound method being returned when accessing a method of a class.

msg181915 - (view)

Author: Franck Michea (franck) *

Date: 2013-02-11 17:37

Here is at least a correction of Descriptors' HowTo. There are two versions since some stuff differs (object inheritance, ...).

Here are some of my interrogations though:

This also doesn't answer the question about the real source that should be kept. What to do?

I also need a proof-read, since english is not my first language... Anyway it's clearly not enough to be published like that

Have a nice day!

msg293161 - (view)

Author: Martin Panter (martin.panter) * (Python committer)

Date: 2017-05-06 14:16

See Issue 23702 specifically about unbound methods in Python 3, and Issue 25435 about general problems with the how-to in Python 3.

msg293164 - (view)

Author: Raymond Hettinger (rhettinger) * (Python committer)

Date: 2017-05-06 15:16

I will have a chance to work on this before long.

msg350724 - (view)

Author: Raymond Hettinger (rhettinger) * (Python committer)

Date: 2019-08-29 06:07

[Davide]

Early on the choice of variable names diverged (including in various PEPs and in the C source). I will harmonize where I can but the cat is out of the bag.

PEP 252 specifies that it is optional. Various builtin descriptors also make it optional (function_get, staticmethod_get, classmethod_get, and property_get).

I'm fixing the main docs and non-compliant code in PR 12992

explain data, non-data and read-only descriptors in the set reference, or more simply, how the > defintion of set affects these things.

That is reasonable. Will add to the datamodel docs.

[Jay Parlar]

Another problem is that the examples and text in the section "Functions and Methods" is no longer correct in 3.x. Namely the the references to unbound methods

That was fixed a good while ago.

msg350728 - (view)

Author: Raymond Hettinger (rhettinger) * (Python committer)

Date: 2019-08-29 06:22

See PR 12992 for the cross-reference from the set docs to the section covering data and non-data descriptors.

History

Date

User

Action

Args

2022-04-11 14:57:17

admin

set

github: 56286

2019-08-29 08:29:30

rhettinger

set

status: open -> closed
resolution: fixed
stage: needs patch -> resolved

2019-08-29 06:22:12

rhettinger

set

messages: +

2019-08-29 06:07:50

rhettinger

set

messages: +

2017-05-20 09:35:51

martin.panter

link

issue20751 dependencies

2017-05-06 15:16:26

rhettinger

set

messages: +

2017-05-06 14:16:47

martin.panter

set

nosy: + martin.panter
messages: +

2013-05-03 18:41:12

nedbat

set

nosy: + nedbat

2013-05-03 09:48:34

rhettinger

set

priority: normal -> low
assignee: rhettinger

2013-02-12 08:25:53

rhettinger

set

assignee: rhettinger -> (no value)

2013-02-11 17:38:18

franck

set

files: + 12077_descriptor_howto_python2.patch

2013-02-11 17:37:59

franck

set

files: + 12077_descriptor_howto_python3.patch
versions: + Python 3.5
nosy: + franck

messages: +

keywords: + patch

2012-11-08 08:37:48

ezio.melotti

set

type: enhancement
versions: + Python 3.4

2011-05-23 14:41:31

eric.araujo

set

nosy: + eric.araujo

2011-05-19 14:16:48

Jay.Parlar

set

messages: +

2011-05-17 18:17:19

Jay.Parlar

set

nosy: + Jay.Parlar
messages: +

2011-05-17 05:16:58

daniel.urban

set

nosy: + daniel.urban

2011-05-17 02:08:01

rhettinger

set

assignee: docs@python -> rhettinger

nosy: + rhettinger

2011-05-16 11:45:58

ezio.melotti

set

nosy: + ezio.melotti

stage: needs patch

2011-05-14 13:56:25

davide.rizzo

create