Is it safe to use the python word “type” in my code?

Posted on

Question :

Is it safe to use the python word “type” in my code?

Can I use the word “type” in my own code or is it reserved? My function header:

def get(
    self,
    region='Delhi',
    city='Delhi',
    category='Apartments',
    type='For sale',
limit = 60,
    PAGESIZE=5,
    year=2012,
    month=1,
    day=1,
    next_page=None,
threetapspage=0,
    ):

Thank you

Answer #1:

Using type as a keyword argument to a function will mask the built-in function “type” within the scope of the function. So while doing so does not raise a SyntaxError, it is not considered good practice, and I would avoid doing so.

Answered By: modocache

Answer #2:

Neither. It’s not a reserved word (a list of which can be found at http://docs.python.org/reference/lexical_analysis.html#keywords ), but it’s generally a bad idea to shadow any builtin.

Answered By: Wooble

Answer #3:

While others have pointed out that it’s bad form to shadow python built-ins, this is only the case when either name a function or function parameter as type, however –

It should be noted that the python built-in type is not shadowed in any way if you were to name a class attribute as type.

Even when referencing your class attribute, it would always be prefixed by the class instance self or a custom instance variable – and the python built-in would not be hindered.

For example:

Okay:

>>> class SomeClass():
...     type = 'foobar'
...
...     def someFunction(self):
...         return self.type

Not Okay:

>>> def type(): # Overrides python built-in in global scope
...     pass
...
>>> def foobar(type):
...     return type # Overrides python built-in within func
Answered By: arshbot

Answer #4:

type should absolutely be consider a reserved word. While it can be tempting to use this word for database fields, consider that the fact that type() is one of the most important debugging/ testing functions because it tells you the class of an object.

$ python

>>> x = 5
>>> s = "rockets"
>>> y = [1,2,3] 

>>> print(type(x)) 
class 'int'

>>> print(type(s))
class 'str'

>>> print(type(y)) 
class 'list'

An atlas would be classified a type of book, but consider using the word “category” instead.

Answered By: HashRocketSyntax

Answer #5:

That is more than a decade old question and to be on the safe side, I would recommend using kind instead of type as argument.

For a long time I was considering building a rename recommendation for all reserved or builins, but seeing your question made me finally do it.

Please check python-keyword-aliases.md and feel free to propose new entries to that list.

Answered By: sorin

Leave a Reply

Your email address will not be published. Required fields are marked *