当前位置:  开发笔记 > 编程语言 > 正文

为什么Python没有真正的常量?这不危险吗?

如何解决《为什么Python没有真正的常量?这不危险吗?》经验,为你挑选了1个好方法。

Python 3

我通过一本书学习Python.现在我了解到Python在这个意义上没有常量,它们在C++或C#中可用...例如,可以编写这样的危险代码:

>>> import math
>>> math.pi
3.141592653589793
>>> math.pi = 123.456
>>> math.pi
123.456
>>> 

嗯......对我来说这是一个令人不快的惊喜......

即我可能没有受到保护,因为我加载到我的代码中的任何模块(不是我的)都可能损坏不会改变的数据.

为什么在Python中它是如此制作的?这不危险吗?



1> Willem Van O..:

Python是一种动态语言:您可以添加/删除/修改对象的属性和功能,以满足您的需求.虽然这有点大胆,但基本上一个对象只不过是一本字典.您可以简单地将属性添加到一个对象等.Python还支持 - 或多或少 - 鸭子类型的想法:

"如果它看起来像鸭子,像鸭子那样嘎嘎叫,它就是一只鸭子".

换句话说,如果你想让一个对象看起来像某个函数所期望的另一个对象,只需给它羽毛和腿并删除它的第二个头,函数就会接受它.

这是Python的设计原则之一,它非常有用:假设您想在一段代码中修补函数,您可以简单地:

def better_function(param,eter):
    #...
    pass

somemodule.badfunction = better_function

从而修复代码.此外,如果有一个软件包可以用网页做一些不错的事情,你可以通过重写几种方法轻松地修改它来做打印机.

缺点确实是你对引入错误的模块的控制较少(故意的;我并没有声称它们会这样做,尽管不能排除恶意意图).有一些方法来保护你的代码,例如制作类和对象不变:您可以覆盖__setattr____delattr__函数被调用来设置和删除属性,从而使其难以/不可能改变的对象,但这会破坏活力Python:Python程序员希望他们可以改变一个对象.

然而,对象/类/ ...的重度保护违背了动态语言的原则.如果你想要一种保证这种东西的语言,你最好使用像haskell这样的静态类型语言.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有