Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 编写属性,而不是完全阻止它——这可能是不可能的,至少是非常困难的。(例如,我认为您可能会替换描述符对象本身。)“仅仅因为”很少是任何有能力的设计决策的理由。我不担心黑客。我只是在帮助自己避免虫子。当我经过某个容器时,我调用各种函数,这些函数可能(意外地)修_Python_Reference_Constants_Language Design_Language Features - Fatal编程技术网

Python 编写属性,而不是完全阻止它——这可能是不可能的,至少是非常困难的。(例如,我认为您可能会替换描述符对象本身。)“仅仅因为”很少是任何有能力的设计决策的理由。我不担心黑客。我只是在帮助自己避免虫子。当我经过某个容器时,我调用各种函数,这些函数可能(意外地)修

Python 编写属性,而不是完全阻止它——这可能是不可能的,至少是非常困难的。(例如,我认为您可能会替换描述符对象本身。)“仅仅因为”很少是任何有能力的设计决策的理由。我不担心黑客。我只是在帮助自己避免虫子。当我经过某个容器时,我调用各种函数,这些函数可能(意外地)修,python,reference,constants,language-design,language-features,Python,Reference,Constants,Language Design,Language Features,编写属性,而不是完全阻止它——这可能是不可能的,至少是非常困难的。(例如,我认为您可能会替换描述符对象本身。)“仅仅因为”很少是任何有能力的设计决策的理由。我不担心黑客。我只是在帮助自己避免虫子。当我经过某个容器时,我调用各种函数,这些函数可能(意外地)修改其内容。我很想知道。当然,如果你正在使用的语言有办法真正实现这些功能,那么应该使用这些功能@马克斯:为什么要把偶然突变作为细菌的重要来源?我记不起有过一次错误,因为我不小心修改了一些应该是常量的东西。然而,我确实记得有数百次我不得不修改代码,


编写属性,而不是完全阻止它——这可能是不可能的,至少是非常困难的。(例如,我认为您可能会替换描述符对象本身。)“仅仅因为”很少是任何有能力的设计决策的理由。我不担心黑客。我只是在帮助自己避免虫子。当我经过某个容器时,我调用各种函数,这些函数可能(意外地)修改其内容。我很想知道。当然,如果你正在使用的语言有办法真正实现这些功能,那么应该使用这些功能@马克斯:为什么要把偶然突变作为细菌的重要来源?我记不起有过一次错误,因为我不小心修改了一些应该是常量的东西。然而,我确实记得有数百次我不得不修改代码,因为常量注释不一致。@Paul Hankin:我有复杂的嵌套数据结构,很容易忘记在我应该做的时候制作深度副本(我修改副本以执行各种计算)。谢谢,非常有帮助。虽然我只是将兴趣限制在
const
以帮助避免bug,但这篇文章将
concept
作为一种可散列数据类型涵盖了一个更“有用”/“广泛”的概念。不过,读起来还是很有趣的。Python不使用按引用传递。它使用“引用”,但通过值传递这些引用。比较
def foo(x){x=10;}bar=5;富(巴);;用
void foo(int&x){x=10;}/*…*/int bar=5;富(巴);;谢谢你的澄清。
# simple read only attributes with meta-class programming

# method factory for an attribute get method
def getmethod(attrname):
    def _getmethod(self):
        return self.__readonly__[attrname]

    return _getmethod

class metaClass(type):
    def __new__(cls,classname,bases,classdict):
        readonly = classdict.get('__readonly__',{})
        for name,default in readonly.items():
            classdict[name] = property(getmethod(name))

        return type.__new__(cls,classname,bases,classdict)

class ROClass(object):
    __metaclass__ = metaClass
    __readonly__ = {'a':1,'b':'text'}


if __name__ == '__main__':
    def test1():
        t = ROClass()
        print t.a
        print t.b

    def test2():
        t = ROClass()
        t.a = 2

    test1()