unittest.mock.sentinel did the trick for me. As long as there is something for it in a standard library for it I think it’s covered. Everyone defining their own classes or objects would be confusing.
> On 12 Jun 2023, at 14:27, Rob Cliffe via Python-ideas > <python-ideas@python.org> wrote: > > The problem with adding a second None-like type is that gradually it will > acquire meaning as a possible value in some contexts. Maybe not in your > code, but in other people's. Then will there be a request for a 3rd such > object? (4th, 5th ...?). > Defining your own sentinel object, as you do, seems like a good solution. It > means *you* control what meaning it has in the contexts where it appears. > Best wishes > Rob Cliffe > > On 07/06/2023 17:43, Dom Grigonis wrote: >> This has been bugging me for a long time. It seems that python doesn’t have >> a convention for “Undefined” type. >> >> When I started using python I naturally used None for it (as advised). >> >> However, the more I work with python, the more I find that None is a >> meaningful type. And it is a type that is convenient to use in a lot of >> cases, where it is not actually “None”. >> >> One big example is: >> numpy: array[None, :] >> >> Another is simple cascading of defaults. >> E.g. >> >> ```python >> class A: >> def __init__(self, default=’string'): >> self.default = default >> >> def method(self, default=None): >> default = default if default is not None else self.default >> dct[‘key’] = other_dict.get(‘key’, default) >> return to_json(dct) >> ``` >> >> None has a logic in `some_func`, which is important. >> Now if I want to enforce None passed to to_json I have no way to do it. >> >> I know there are many workarounds for this, but there is no `consistent` way >> of doing this. >> >> I have been using Ellipsis in the past, but it doesn’t feel right, because >> it also has a meaning and I might need to use those functions with e.g. >> numpy in he future and will have to change it. >> >> Now, I came back to this issue again and my latest solution is to just >> define: >> UNDEFINED = object() >> in library constants.py >> >> Then code above is very clear and I think this is a good and sustainable >> solution. >> >> I know, that in a way ’None’ is already this, but it is generally used in 2 >> ways: >> 1. A variable/argument is undefined in python space >> 2. Global indication, that a value is undefined (e.g. equivalence of null in >> json) >> >> What I am proposing is to have 1 more constant in python ‘Undefined’, which >> will indicate ‘Undefined’ in python space and leave None to be used in more >> general sense. >> >> I also found this article while looking for solution just now: >> https://levelup.gitconnected.com/python-why-none-is-not-nothing-bb3de55dd471 >> <https://levelup.gitconnected.com/python-why-none-is-not-nothing-bb3de55dd471> >> It seems that people who use typing are also running into ambiguities and >> trying to hack something together. >> I avoid typing until its 99% mature so can't comment more on this. >> >> What are your thoughts? Am I onto something or am I missing something? >> Anyone else had similar encounters? >> >> >> >> >> >> >> >> >> >> >> _______________________________________________ >> Python-ideas mailing list -- python-ideas@python.org >> <mailto:python-ideas@python.org> >> To unsubscribe send an email to python-ideas-le...@python.org >> <mailto:python-ideas-le...@python.org> >> https://mail.python.org/mailman3/lists/python-ideas.python.org/ >> <https://mail.python.org/mailman3/lists/python-ideas.python.org/> >> Message archived at >> https://mail.python.org/archives/list/python-ideas@python.org/message/RGUNJYXWHE7UM2W6FCAMGLJVLXEYHA2Q/ >> >> <https://mail.python.org/archives/list/python-ideas@python.org/message/RGUNJYXWHE7UM2W6FCAMGLJVLXEYHA2Q/> >> Code of Conduct: http://python.org/psf/codeofconduct/ >> <http://python.org/psf/codeofconduct/> > > _______________________________________________ > Python-ideas mailing list -- python-ideas@python.org > To unsubscribe send an email to python-ideas-le...@python.org > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > Message archived at > https://mail.python.org/archives/list/python-ideas@python.org/message/2EH4RSB6LPZLV7OOQOOI65DWFSKCZNS2/ > Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/QBLI2ZWOKUB7BEPAZSKAQ63T3WEWIR4M/ Code of Conduct: http://python.org/psf/codeofconduct/