Python module namespaces examples
Python module namespaces examples
I'll respond in English as you requested.
In Python, a namespace refers to the scope within which names (such as variables and functions) are defined. Namespaces provide isolation between different modules or parts of your program, allowing you to use the same name multiple times without conflicts.
Let's explore some examples:
Built-in namespace: The __builtins__
module provides access to built-in names like print(), len(), range(), etc. You can modify this namespace by assigning values to these names:
import __builtins__
builtins.print = lambda x: "Custom Print:", x # redefine the print function
print("Hello") # Output: Custom Print: Hello
Module namespace: Each Python module has its own namespace. You can create your own modules and define names within them:
# mymodule.py
def hello():
print("Hello from mymodule!")
main.py
import mymodule
mymodule.hello() # Output: Hello from mymodule!
Local namespace: The local namespace refers to the scope within a function. You can define names that are specific to this function:
def outer():
x = "Outer"
def inner():
y = "Inner"
print(f"{x} - {y}") # Output: Outer - Inner
inner()
outer()
Global namespace: The global namespace is the top-level scope where you define your program's main code. Names defined here can be accessed from any other part of your program:
x = "Global"
def print_global():
print(x) # Output: Global
print_global()
Namespace manipulation: You can manipulate namespaces using various techniques:
Importing modules: You can import specific functions or variables from another module, effectively creating a new namespace within your current scope:from math import pi, sin
print(pi) # Output: 3.14159265359...
Renaming imports: You can rename imported modules to avoid conflicts with existing names in your program:
import math as mather
from statistics import mean
mather.pi # Accessing the renamed pi value
mean([1, 2, 3]) # Using the imported mean function
In summary, namespaces in Python provide a way to isolate different parts of your program and define unique names without conflicts. By understanding these examples, you can better manage your code's scope and avoid potential issues.
What is class namespace in Python?
I'm happy to respond in English for once!
In Python, a class namespace refers to the scope within which a class definition is evaluated. In other words, it's the space where all the variables, functions, and classes defined inside the class are stored.
When you define a class in Python, you're essentially creating a new namespace that contains all the attributes (data) and methods (functions) of that class. This namespace is known as the "class namespace" or simply the "namespace" of the class.
The class namespace is where all the variables defined inside the class using self
are stored. For example, consider this simple class:
class MyClass:
def init(self):
self.my_var = 10
In this case, my_var
is a variable defined in the class namespace.
The class namespace also contains any functions or methods you define inside the class, such as the __init__
method above. These functions are bound to the instance of the class and can be called using dot notation (e.g., my_instance.my_method()
).
Here's another example:
class MyClass:
def greet(self):
print("Hello!")
def farewell(self):
print("Goodbye!")
In this case, both greet
and farewell
are methods defined in the class namespace. You can call them using dot notation like this: my_instance.greet()
or my_instance.farewell()
.
When you create an instance of a class, Python creates a new dictionary called the "instance namespace" (or "instance scope") that contains all the attributes and methods defined in the class namespace. This means that when you access an attribute or method using dot notation on an instance, Python looks up the value in the instance's namespace first, then falls back to the class namespace if it's not found.
So, in summary, the class namespace is where you define all your classes' attributes and methods, which are then stored in each instance of that class.