面试题:Python模块命名空间与作用域之元类中的命名空间
在Python中,我们知道元类用于创建类。假设定义了一个元类 `Meta` 和一个使用该元类的类 `MyClass` 如下:
```python
class Meta(type):
def __new__(cls, name, bases, namespace):
new_namespace = {}
for key, value in namespace.items():
if not key.startswith('__'):
new_key = 'custom_' + key
new_namespace[new_key] = value
return super().__new__(cls, name, bases, new_namespace)
class MyClass(metaclass = Meta):
def original_method(self):
return 'Original method'
```
1. 请解释 `Meta` 元类的 `__new__` 方法中对 `namespace` 进行操作的原理。
2. 当实例化 `MyClass` 并调用 `original_method` 时,Python如何在修改后的命名空间和作用域中查找该方法?
3. 如果在 `MyClass` 中定义了一个类变量 `my_var`,它在命名空间和作用域中的行为与实例方法有何不同?