Python一些技巧和知识点
- 单行刷新打印:
这样就是在屏幕上单行打印,不会刷屏,但是会刷新。
你首先写下class Foo(object),但是类对象Foo还没有在内存中创建。Python会在类的定义中寻找__metaclass__属性,如果找到了,Python就会用它来创建类Foo,如果没有找到,就会用内建的type来创建这个类。把下面这段话反复读几次。
嗯。。。
- 在__init__.py中定义logging参数
这样在最主要的模块的__init__.py上定义完了后,其他文件很自然就可以用logger了。
def log_config():
log_formatter = logging.Formatter(
'%(asctime)s [%(funcName)-12.12s] [%(levelname)-5.5s] %(message)s')
logger = logging.getLogger()
logger.setLevel(logging.INFO)
file_handler = logging.FileHandler('/tmp/itemprofile.log')
file_handler.setFormatter(log_formatter)
logger.addHandler(file_handler)
console_handler = logging.StreamHandler()
console_handler.setFormatter(log_formatter)
logger.addHandler(console_handler)
return logger
- 循环依赖
有时候Python运行不通过,显示某个package找不到不一定是sys.path的设置不对,也有可能是循环依赖导致的包不能被import
Python也会有循环依赖的问题,比如在a.py import B, 在b.py中import A。
尤其是要小心__init__.py中的import,这个会导致在import路径中的每个__init__.py中的包都被import一次,很可能会产生循环依赖,不过一般循环依赖是因为项目的文件层次没有规划好,其实出现反而可能是好事,可以再次审视下调整下。
实际上type函数就是一个元类,元类就是用来创建类的“东西”,换句话说元类就是类的类。- 元类
在Python的世界中,任何东西都是对象,虽然Python的类可以创建对象,但是事实上类本身也是对象。因为对象可以被动态的修改,所以类也可以被动态的修改也就是动态的被创造出来。
type这个古老的函数不仅有查看类型的功能,而且还可以动态的创建类(我知道,根据传入参数的不同,同一个函数拥有两种完全不同的用法是一件很傻的事情,但这在Python中是为了保持向后兼容性)。
type(类名, 父类的元组(针对继承的情况,可以为空),包含属性的字典(名称和值))
你首先写下class Foo(object),但是类对象Foo还没有在内存中创建。Python会在类的定义中寻找__metaclass__属性,如果找到了,Python就会用它来创建类Foo,如果没有找到,就会用内建的type来创建这个类。把下面这段话反复读几次。
嗯。。。
评论
发表评论