Python实现Const

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

Python实现const

:first-child {

margin-top: 0;

}

blockquote:last-child {

margin-bottom: 15px;

}

h1 {

text-transform: uppercase;

font-weight: bold;

border-bottom: 1px solid;

}

h2 {

border-bottom: 1px solid;

}

h3,

h4,

h5,

h6 {

border-bottom: none;

}

html * {

color: #657b83;

}

html body {

background-color: #fdf6e3;

}

html h1,

html h2,

html h3,

html h4,

html h5,

html h6 {

color: #586e75;

border-color: #657b83;

}

html a,

html a:active,

html a:visited {

color: #586e75;

}

html a:hover {

background-color: #eee8d5;

}

html pre {

color: #586e75;

background-color: #eee8d5;

}

html a,

html a:active,

html a:visited,

html code.url {

color: #b58900;

}

html h1 {

color: #b58900;

}

html h2,

html h3,

html h4,

html h5,

html h6 {

color: #b58900;

}

@media print {

body {

margin: 0;

}

* {

color: #000 !important;

}

}

--code[class*="language-"],

pre[class*="language-"] {

background-color: #fdfdfd;

-webkit-box-sizing: border-box;

-moz-box-sizing: border-box;

box-sizing: border-box;

margin-bottom: 1em;

}

/* Inline code */

:not(pre)code[class*="language-"] {

position: relative;

padding: .2em;

-webkit-border-radius: 0.3em;

-moz-border-radius: 0.3em;

-ms-border-radius: 0.3em;

-o-border-radius: 0.3em;

border-radius: 0.3em;

color: #c92c2c;

border: 1px solid rgba(0, 0, 0, 0.1);

}

pre[class*="language-"]:before,

pre[class*="language-"]:after {

content: '';

z-index: -2;

display: block;

position: absolute;

bottom: 0.75em;

left: 0.18em;

width: 40%;

height: 20%;

-webkit-box-shadow: 0px 13px 8px #979797;

-moz-box-shadow: 0px 13px 8px #979797;

box-shadow: 0px 13px 8px #979797;

-webkit-transform: rotate(-2deg);

-moz-transform: rotate(-2deg);

-ms-transform: rotate(-2deg);

-o-transform: rotate(-2deg);

transform: rotate(-2deg);

}

:not(pre)code[class*="language-"]:after,

pre[class*="language-"]:after {

right: 0.75em;

left: auto;

-webkit-transform: rotate(2deg);

-moz-transform: rotate(2deg);

-ms-transform: rotate(2deg);

-o-transform: rotate(2deg);

transform: rotate(2deg);

}

.token.comment,

.token.block-comment,

.token.prolog,

.token.doctype,

.token.cdata {

color: #7D8B99;

}

.token.punctuation {

color: #5F6364;

}

.token.property,

.token.tag,

.token.boolean,

.token.number,

.token.function-name,

.token.constant,

.token.symbol,

.token.deleted {

color: #c92c2c;

}

.token.selector,

.token.attr-name,

.token.string,

.token.char,

.token.function,

.token.builtin,

.token.inserted {

color: #2f9c0a;

}

.token.operator,

.token.entity,

.token.url,

.token.variable {

color: #a67f59;

background: rgba(255, 255, 255, 0.5);

}

.token.atrule,

.token.attr-value,

.token.keyword,

.token.class-name {

color: #1990b8;

}

.token.regex,

.token.important {

color: #e90;

}

.language-css .token.string,

.style .token.string {

color: #a67f59;

background: rgba(255, 255, 255, 0.5);

}

.token.important {

font-weight: normal;

}

.token.entity {

cursor: help;

}

.namespace {

opacity: .7;

}

@media screen and (max-width: 767px) {

pre[class*="language-"]:before,

pre[class*="language-"]:after {

bottom: 14px;

-webkit-box-shadow: none;

-moz-box-shadow: none;

box-shadow: none;

}

}

/* Plugin styles */

.token.tab:not(:empty):before,

.token.cr:before,

.token.lf:before {

color: #e0d7d1;

}

/* Plugin styles: Line Numbers */

pre[class*="language-"].line-numbers {

padding-left: 0;

}

pre[class*="language-"].line-numbers code {

padding-left: 3.8em;

}

pre[class*="language-"].line-numbers .line-numbers-rows {

left: 0;

}

--Python实现constpython语言本身没有提供const,但实际开发中经常会遇到需要使用const的情形,由于语言本身没有这种支出,因此需要使用一些技巧来实现这一功能

定义const类如下

import sys

class Const(object):

class ConstError(TypeException): pass

def __setattr__(self, key, value):

if self.__dict__.has_key(key):

raise self.ConstError, "Changing const.%s" % key

else:

self.__dict__[key] = value

def __getattr__(self, key):

if self.__dict__.has_key(key):

return self.key

else:

return None

sys.modules[__name__] = Const()

使用sys.modules[name]可以获取一个模块对象,并可以通过该对象获取模块的属性,这儿使用了sys.modules向系统字典中注入了一个Const对象从而实现了在执行import const时实际获取了一个Const实例的功能,sys.module在文档中的描述如下

sys.modules

This is a dictionary that maps module names to modules which have already been loaded. This can be manipulated to force reloading of modules and other tricks. Note that removing a module from this dictionary is not the same as calling reload() on the corresponding module object.

sys.modules[name] = Const()这条语句将系统已加载的模块列表中的const替换为了Const(),即一个Const实例

这样,整个工程需要使用的常量都应该定义在一个文件中,如下

fromPRoject.utils import const

const.MAIL_PROTO_IMAP = 'imap'

const.MAIL_PROTO_Gmail= 'gmail'

const.MAIL_PROTO_HOTMAIL = 'hotmail'

const.MAIL_PROTO_EAS = 'eas'

const.MAIL_PROTO_EWS = 'ews'

这儿首先需要说明python中import module和from module import的区别

import module只是将module的name加入到目标文件的局部字典中,不需要对module进行解释from module import xxx需要将module解释后加载至内存中,再将相应部分加入目标文件的局部字典中python模块中的代码仅在首次被import时被执行一次from project.utils import const时,发生了sys.modules[name] = Const(),此时const模块已经加载进入内存,系统字典中也已经有了Const对象,随后既可以使用Const实例了

在其他文件中需要使用常量值时,以如下方式调用

from project.apps.project_consts import const

print const.MAIL_PROTO_IMAP

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航