不能理解点运算符的概念
嗨,大家真的对点运算符的工作感到困惑。我尝试过的代码
class Name:
class x:
def __init__(self,y):
self.y = y
def __init__(self):
pass
some = Name()
some.x.y = 'foo'
print some.x.y
当我运行此代码时,它会成功输出foo
。
但是当我尝试代码时
class Name:
class x:
def __init__(self,y,z):
self.y = y
self.z = z
def __init__(self):
pass
some = Name()
some.x.y.z = 'foo'
print some.x.y.z
我收到一个错误..我该如何使用likesome.x.y.z
并将输出作为foo
?? ..
任何有用的帮助,将不胜感激..谢谢
-
目前尚不清楚为什么您期望第二个代码能工作。第一个代码是不好的,因为它混淆了类和实例:
some
是一个 实例 中的 类Name
;
some.x
是一 类 ,也是一 类属性 的Name
。如果您创建另一个Name
实例,它将在上共享相同的属性x
。而是考虑一下:class Name(object): def __init__(self, x=None, y=None, z=None): self.x = x self.y = y self.z = z y = Name(z='foo') x = Name(y=y) some = Name(x=x) ##some = Name(x=Name(y=Name(z='foo'))) # one-line equivalent print some.x.y.z # 'foo'
结果看起来像:
- some: Name - x: Name - x: None - y: Name - x: None - y: None - z: 'foo' - z: None - y: None - z: None
您不能尝试访问任意属性链
a.b.c.d
并期望它们起作用。您必须定义对象应该具有的属性(直到进入eg
__getattr__
,但现在就不用担心了)。尽管可以向自己的类(因此可以None
设置some.x.y.z.foo = 'bar'
),但是不能将任意属性添加到例如或的字符串中(因此现在不能设置some.x.y.bar = 'baz'
)。但是您不能执行例如some.x.y.foo.bar = 'baz'
,因为some.x.y.foo
还不存在。