Python 无法理解点运算符的概念
嘿,伙计们,我真的对点运算符的工作感到困惑..我试过的代码Python 无法理解点运算符的概念,python,Python,嘿,伙计们,我真的对点运算符的工作感到困惑..我试过的代码 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:
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
,并期望它们正常工作;您必须定义对象应该具有的属性(直到您进入例如\uuu getattr\uuuu
,但现在我们不必担心)。您不能将任意属性添加到例如字符串或None
(因此您现在不能设置some.x.y.z.foo='bar'
),尽管您可以将其添加到您自己的类中(因此您可以设置some.x.y.bar='baz'
)。但是你不能这样做,例如some.x.y.foo.bar='baz'
,因为some.x.y.foo
还不存在。你是说self.x.z
?你可以使用some.x.y
和some.x.z
。但是z
不在y
内,那么为什么您希望一些.x.y.z
可以工作呢?@Barmar您可以将其作为答案发布吗请注意,嵌套类的\uuuu init\uuuu
从未被调用,因为您从未实例化该类。当您设置``some.x.y`时,您正在some.x
上设置一个class属性。从某种意义上说,这并不重要,因为x
本身就是一个类变量,但它表明您并不真正理解代码在做什么。你想在这里完成什么?@user3843420:为什么你想做一些.x.y.z?与其说语法,不如说你能描述一下你想做的事情的含义吗?这可能是我见过的最高比率quality(答案)/quality(问题)
SO,恭喜你:)