Cha*_*l72 2 python namespaces python-3.x
以下Python代码正常执行而不引发异常:
class Foo:
pass
class Foo:
pass
def bar():
pass
def bar():
pass
print(Foo.__module__ + Foo.__name__)
Run Code Online (Sandbox Code Playgroud)
但显然,有多个实例__main__.Foo和__main__.bar.为什么Python遇到此命名空间冲突时不会引发错误?而且由于它没有引发错误,它到底在做什么?第一类是否被第二类__main__.Foo取代__main__.Foo?
在Python中,一切都是对象 - 某种类型的实例.Eg 1是一个类型的实例int,def foo(): pass创建一个对象foo,它是一个类型的实例function(对于类 - 对象,由classstatement 创建的对象是类型的实例type).鉴于此,之间没有区别(在名称绑定机制的级别)
class Foo:
string = "foo1"
class Foo:
string = "foo2"
Run Code Online (Sandbox Code Playgroud)
和
a = 1
a = 2
Run Code Online (Sandbox Code Playgroud)
顺便说一句,类定义可以使用type函数执行(是的,有类型type和内置函数type):
Foo = type('Foo', (), {string: 'foo1'})
Run Code Online (Sandbox Code Playgroud)
因此,类和函数不是一些不同类型的数据,尽管可以使用特殊语法来创建它们的实例.
另请参阅相关数据模型部分.
| 归档时间: |
|
| 查看次数: |
313 次 |
| 最近记录: |