Python % 属性前缀的用途
Python purpose of % attribute prefix
我见过 Python 个具有 %values
等属性的对象。我无法访问此类属性,因为它们会引发 SyntaxError
。他们似乎还要求在没有 SyntaxError
:
的情况下创建 setattr
class A(object):
pass
a = A()
setattr(a, "%values", 42)
a.%values # results in SyntaxError: invalid syntax
class B(object):
def __init__(self):
self.%values = 42 # results in SyntaxError: invalid syntax
这里的%
有什么目的或意义吗?为什么可以使用 setattr
设置 %values
,否则会引发 SyntaxError
?
Does the % have any purpose or meaning here?
很可能正是为了防止您使用常规点符号访问这些属性,因为正如您所见,您不能这样做。这会阻止您使用它们,使它们以某种方式 "private" 用于任何正在使用它们的应用程序。不过,可能有更好的方法来实现这一点。如果我看到这样的代码,我会称之为气味。
Why can %values be set using setattr, but otherwise raises a SyntaxError?
属性存储在字典中,字典键可以是任何东西。他们不必遵循与 Python 标识符相同的规则; Python 所做的最多的事情就是验证它们是字符串。 (Python 的某些旧版本确实强制传递给 setattr
的名称是有效的 Python 标识符,但这在一段时间前已从语言中删除。)
%values
不是直接的 valid identifier in Python. As discovered in this question, setattr()
just changes an object's __dict__
属性,所以这无关紧要。 object.__setattr__()
在尝试正常的变量赋值时被调用,但它似乎也不关心有效标识符:
class A(object):
pass
a=A()
a.__setattr__("%val",1) #works
print a.__dict__ #prints "{'%val': 1}"
setattr()
似乎在修改其 __dict__
:
之前调用对象 __setattr__()
函数(如果它存在)
class A:
def __setattr__(self,name,value):
print "__setattr__ called"
a=A()
a.val=1 #prints "__setattr__ called"
不过,在实际代码中,我认为没有任何理由设置 __dict__
或调用 __setattr__()
或 setattr()
以使其看起来像一个以 a 开头的变量名百分号。
我见过 Python 个具有 %values
等属性的对象。我无法访问此类属性,因为它们会引发 SyntaxError
。他们似乎还要求在没有 SyntaxError
:
setattr
class A(object):
pass
a = A()
setattr(a, "%values", 42)
a.%values # results in SyntaxError: invalid syntax
class B(object):
def __init__(self):
self.%values = 42 # results in SyntaxError: invalid syntax
这里的%
有什么目的或意义吗?为什么可以使用 setattr
设置 %values
,否则会引发 SyntaxError
?
Does the % have any purpose or meaning here?
很可能正是为了防止您使用常规点符号访问这些属性,因为正如您所见,您不能这样做。这会阻止您使用它们,使它们以某种方式 "private" 用于任何正在使用它们的应用程序。不过,可能有更好的方法来实现这一点。如果我看到这样的代码,我会称之为气味。
Why can %values be set using setattr, but otherwise raises a SyntaxError?
属性存储在字典中,字典键可以是任何东西。他们不必遵循与 Python 标识符相同的规则; Python 所做的最多的事情就是验证它们是字符串。 (Python 的某些旧版本确实强制传递给 setattr
的名称是有效的 Python 标识符,但这在一段时间前已从语言中删除。)
%values
不是直接的 valid identifier in Python. As discovered in this question, setattr()
just changes an object's __dict__
属性,所以这无关紧要。 object.__setattr__()
在尝试正常的变量赋值时被调用,但它似乎也不关心有效标识符:
class A(object):
pass
a=A()
a.__setattr__("%val",1) #works
print a.__dict__ #prints "{'%val': 1}"
setattr()
似乎在修改其 __dict__
:
__setattr__()
函数(如果它存在)
class A:
def __setattr__(self,name,value):
print "__setattr__ called"
a=A()
a.val=1 #prints "__setattr__ called"
不过,在实际代码中,我认为没有任何理由设置 __dict__
或调用 __setattr__()
或 setattr()
以使其看起来像一个以 a 开头的变量名百分号。