[Python-ideas] More alternate constructors for builtin type
Steven D'Aprano
steve at pearwood.info
Tue May 7 08:50:49 EDT 2019
On Wed, May 08, 2019 at 12:18:34AM +1200, Greg Ewing wrote:
> Steven D'Aprano wrote:
>
> >That suggests a possible pair of constructors:
> >
> > bytes.from_int(n) -> equivalent to b'%d' % n
> > bytes.ord(n) -> equivalent to bytes((n,))
>
> I don't see how bytes.from_int(n) is any clearer about what it
> does than just bytes(n). If we're going to have named constructors,
> the names should indicate *how* the construction is being done,
> not just repeat the type of the argument.
Don't be shy, give us your suggested name.
I'm not married to the suggestion of "from_int", if somebody with better
skills at naming than me can come up with a short but descriptive name
that would be great. But my other suggestion was going to be:
bytes.return_bytes_representing_the_integer_input_as_an_ascii_bytestring()
*wink*
But seriously, its nice when a method of function name is completely
self-explanatory, and some day I hope to find one which is. But until
then, names are more like mnemonics:
- dict.fromkeys returns a dict created from keys in what way?
- str.encode encodes a string into what kind of data?
- bytes.fromhex does what precisely?
- what on earth is a glob?
We say "import spam", not "import module spam and bind it to the name
spam". We use "import" as a short name that, once we've learned what it
does, reminds us what it does. It doesn't have to document every bit of
functionality, just enough to associate the name with the semantics.
In this case, the problem we are trying to solve is this:
- convert an int like 12345 into a byte-string like b'12345'.
Imagine you're looking at the dir(bytes) to find an appropriate method
that perhaps does what you want, and you see methods like:
- count
- decode
- fromhex
- isdigit
- split
etc, plus the suggested "fromint". Which method are you going to
associate with the problem you're trying to solve?
--
Steven
More information about the Python-ideas
mailing list