On Mon, Jan 11, 2021 at 5:21 PM Larry Hastings <la...@hastings.org> wrote:
> > On 1/11/21 4:39 PM, Guido van Rossum wrote: > > The easiest thing would be just to create an empty `__annotations__` for > classes that have no annotated variables, and to hell with the cost. > > I assume you'd keep the existing behavior where functions lazy-create an > empty dict if they have no annotations too? > Indeed -- that's trying to provide a uniform interface. > That all would work fine and be consistent, but you'd probably have to set > the empty __annotations__ dict on modules too. I've noticed that code that > examines annotations tends to handle two classes of objects: "functions" > and "not-functions". Modules also store their __annotations__ in their > __dict__, so the same code path works fine for examining the annotations of > both classes and modules. > I'm not against giving all modules an empty `__annotations__` by default. > > (I noticed that `__slots__` is missing from your list. Maybe because it > follows yet another pattern?) > > I forgot about __slots__! Yup, it's optional, and you can even delete it, > though after the class is defined I'm not sure how much difference that > makes. > > Slots intelligently support inheritance, too. I always kind of wondered > why annotations didn't support inheritance--if D is a subclass of C, why > doesn't D.__annotations__ contain all C's annotations too? But we're way > past reconsidering that behavior now. > Anyway, `__slots__` doesn't behave that way -- seems it behaves similar to `__annotations__`. ``` Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> class A: __slots__ = ['a'] ... >>> class B(A): __slots__ = ['b'] ... >>> B.__slots__ ['b'] >>> class X(A): pass ... >>> X.__slots__ ['a'] >>> A().__dict__ Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'A' object has no attribute '__dict__' >>> X().__dict__ {} >>> ``` -- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/KDBOXAFOGAQGPWYLCQSR2CNPC6QEX772/ Code of Conduct: http://python.org/psf/codeofconduct/