All variables declared inside the Class' body are 'static' attributes.
class SomeClass:
# this is a class attribute
some_attr = 1
def __init__(self):
# this is an instance attribute
self.new_attr = 2
But keep in mind that the 'static' part is by convention, not imposed (for more details on this, read this SO thread).
For more details of this convention and its implications, here is a quick excerpt from the official documentation:
“Private” instance variables that cannot be accessed except from
inside an object, don’t exist in Python. However, there is a
convention that is followed by most Python code: a name prefixed with
an underscore (e.g. _spam) should be treated as a non-public part of
the API (whether it is a function, a method or a data member). It
should be considered an implementation detail and subject to change
without notice.
Since there is a valid use-case for class-private members (namely to
avoid name clashes of names with names defined by subclasses), there
is limited support for such a mechanism, called name mangling. Any
identifier of the form __spam (at least two leading underscores, at
most one trailing underscore) is textually replaced with
_classname__spam, where classname is the current class name with leading underscore(s) stripped. This mangling is done without regard
to the syntactic position of the identifier, as long as it occurs
within the definition of a class.
All variables declared inside the Class' body are 'static' attributes.
But keep in mind that the 'static' part is by convention, not imposed (for more details on this, read this SO thread).
For more details of this convention and its implications, here is a quick excerpt from the official documentation:
static attributes are data attributes in python. so that attributes assigned in class:-
This is different from C++ and Java, where a static member can't be accessed using an instance:-
also builtin method
setattr
will help you to setstatic variable(data attribute)
.Just to add to it, you can have static variables in functions as well, not only classes:
You can use standard @property decorator to make static attribute:
All variables defined on the class level in Python are considered static
You can have two different variables in your class under the same name (one static and one ordinary). Don't be confused.