关于在类里面实例化类外部以“__”开头的类的问题

先来看一段代码


class Test1:
    def __init__(self):
        print(__Test2())

class __Test2:
    pass

if __name__ == '__main__':
    Test1()

这段代码的本意是在“Test1”的构造方法里实例化一个“__Test2”,但是当你执行这段代码的时候,Python会提示你“NameError: name ‘_Test1__Test2’ is not defined”。明明实例化的是__Test2为什么会提示“_Test1__Test2”找不到呢?原来在Python里面以“__”开头成员是私有成员,Python会采取一些措施阻止这些成员被类外部的代码访问。Python阻止私有成员被类外部的代码访问的方法是十分粗暴的,它的做法是不管你的代码是在定义或访问成员,还是在定义或访问局部变量,甚至在调用其他类的成员,只要在类内部出现以“__”开头并且不以“_”结尾的标识符都会加上一个特定的前缀。因此上面的代码实例化“__Test2”时显然被Python当成了访问私有成员而加上了个前缀,自然就找不到了。既然知道原因就容易解决了,把上面代码实例化“__Test2”的代码换成“eval(“__Test2()”)”就可以了,因为这时“__Test2”是以字符串而不是标识符出现的,所以Python不会把它加上前缀。

让Twenty Seventeen的页头媒体只在第一页显示

WordPress 2017年的新主题Twenty Seventeen增加了页头媒体功能,可以在访客进入主页时显示一副全屏的超大图片,往下滚动就能看到内容,非常炫。但是这个功能有一个非常不好的地方,它每一次翻页都会显示一次,会让访客觉得非常烦,跟牛皮鲜一样。下面就跟大家分享一种方法让这个页头媒体只在第一页显示。

首先登录后台,进入“外观”->“编辑”页面。然后在右侧的模版列表中点击首页模版,找到这段代码

the_posts_pagination(array(
	'prev_text' => twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '' . __( 'Previous page', 'twentyseventeen' ) . '',
	'next_text' => '' . __( 'Next page', 'twentyseventeen' ) . '' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ),
	'before_page_number' => '' . __( 'Page', 'twentyseventeen' ) . ' ',
) );

把它替换为

the_posts_pagination( array(
	'prev_text' => twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '' . __( 'Previous page', 'twentyseventeen' ) . 	'',
	'next_text' => '' . __( 'Next page', 'twentyseventeen' ) . '' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ),
	'before_page_number' => '' . __( 'Page', 'twentyseventeen' ) . ' ',
	'format'=>'page/%#%#content',
) );

Angular三种数据绑定方式总结

  • attr= 单向绑定,将等号右侧的常量绑定到组件
  • [attr]= 单向绑定,将等号右侧的表达式绑定到组件
  • (attr)= 事件绑定,组件内的相应事件触发时执行等号右侧的表达式
  • [(attr)]= 双向绑定,将等号右侧的变量的值绑定到组件,同时将组件内相应值的变更绑定到等号右侧的变量。组件需有一个名为attrChange的事件,并在相应值更新时触发该事件。这种绑定相当于[attr]=”value”(attrChange)=”value=$event”

Asp.net Core下cshtml动态编译出错的解决方法

今天在尝试使用VS Code手动开发asp.net core应用时发现cshtml文件在动态编译时报了很多错误,用VS2015自动生成的项目却不会有这个问题,通过把VS2015自动生成的project.json里的选项一一添加到手动开发的项目里最终发现是preserveCompilationContext选项的问题,在buildOptions里把该选项设为true即可解决报错问题。
qq%e6%88%aa%e5%9b%be20161006172458

2016-10-8:原来dotnet net命令还有个-t web参数,使用这个参数生成的项目就不存在上面说的问题。

OSX下查看dd命令的进度

在Linux下如果要查看dd命令的进度一般只需要执行“kill -USR1 pid”就行了,但是在OSX下面这样做行不通,执行了这条命令后dd就真的被杀掉了。查看OSX下dd的man文档发现,OSX下面dd打印进度的信号并不是SIGUSR1,而是SIGINFO,因此需要执行“kill -INFO pid”才能查看dd命令的进度。

Steam支付后没有获得相应游戏的解决方法

在Steam买游戏时有一定概率出现支付后库里并没有出现刚购买的游戏,查看消费史会提示该笔消费仍待处理,虽然出现这种情况等几天就会自动解决,但是自己喜欢的游戏要等几天才能玩到会非常不爽,本文将介绍一种方法让你立刻玩上自己喜欢的游戏。

首先你需要回到购物车,点击为自己购买,然后点击继续,就会出现一行橙色背景的字,提示你“您已拥有购物车中的一件或多件物品”,这时在回到库中查看,游戏就会神奇地出现在库里面了。需要注意的是,这里并不是叫你再刷卡支付一次,只要看到那行橙色背景的字就可以了,不要傻傻地再支付一次哦。

chnroutes失效的原因

chnroutes是一个VPN流量分流脚本,能够自动修改路由表达到国内IP通过本地网络连接,国外IP通过VPN网络连接的目的。有的朋友在使用这个脚本的时候可能会碰到明明配置正确却无论访问国内IP还是国外IP都通过VPN网络连接的情况。造成这个问题的原因是使用了国外的DNS地址。一般用于翻墙的国外VPN服务器在连接后会给客户端返回一个国外的DNS地址,如果本地没有对VPN连接设置DNS地址,那么默认就会使用VPN服务器返回的DNS地址。因此只要把VPN连接的DNS地址强制设置成一个国内的DNS地址即可解决此问题。强制设置成国内的DNS地址以后可能会有一些被墙的网站不能访问,这是因为使用国内DNS解析那些被墙的网站的时候很有可能会解析到一个虚假的IP地址,因此也需要在hosts文件中强制设定这些网站的IP地址。