【发布时间】:2012-09-16 03:33:20
【问题描述】:
我正在学习python,虽然我认为我了解了Python的整个概念和概念,但今天我偶然发现了一段我没有完全理解的代码:
假设我有一个应该定义 Circles 但缺少主体的类:
class Circle():
pass
由于我没有定义任何属性,我该怎么做:
my_circle = Circle()
my_circle.radius = 12
奇怪的是 Python 接受了上述声明。我不明白为什么 Python 不提出undefined name error。我确实明白,通过动态类型,我只是在需要时将变量绑定到对象,但Circle 类中不应该存在属性radius 来允许我这样做吗?
编辑:你的答案中有很多精彩的信息! 感谢大家提供的所有精彩答案!很遗憾,我只能将其中一个标记为答案。
【问题讨论】:
-
当您在
__init__初始化self.radius时,您做的不是完全相同吗? -
@JBernardo 是的,但是在这种情况下,您正在为类
Circle()显式定义radius属性。就我而言,我没有在类主体中创建任何属性。 -
@NlightNFotis 不,您正在做同样的事情,因为
self只是一个变量,就像任何其他变量一样。 -
@NlightNFotis 另外,Python is not Java 和一种不会影响您对编程的看法的语言不值得了解 - [Alan Perlis](en.wikiquote.org/wiki/Alan_Perlis)
-
@NlightNFotis 不,你不是。您定义一个函数,该函数分配给它的第一个参数的一个属性。碰巧这个函数被一个类的
__init__属性引用,该属性恰好在对象构造之后被调用。
标签: python attributes python-3.x declaration