PEP 8建议使用单个尾部下划线以避免与python关键字冲突,但是与标准python模块的模块名称冲突怎么办?这也应该是一个尾随下划线吗?
我想象的是这样的:
import time
time_ = time.time()
Run Code Online (Sandbox Code Playgroud) 我在分配赋值运算符时遇到问题.
我已成功超载__setattr__.但是在对象初始化之后,我想做__setattr__其他事情,所以我尝试将它指定为另一个函数,__setattr2__.
码:
class C(object):
def __init__(self):
self.x = 0
self.__setattr__ = self.__setattr2__
def __setattr__(self, name, value):
print "first, setting", name
object.__setattr__(self, name, value)
def __setattr2__(self, name, value):
print "second, setting", name
object.__setattr__(self, name, value)
c = C()
c.x = 1
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
first, setting x
first, setting __setattr__
first, setting x
Run Code Online (Sandbox Code Playgroud)
我想要/期望的是什么:
first, setting x
first, setting __setattr__
second, setting x
Run Code Online (Sandbox Code Playgroud) 我在python 2.7.3中看到了这个,同时有pylab和numpy.为什么是这样:
>>> x = pylab.arange(5)
>>> x = x + pylab.nan
>>> print x
[ nan nan nan nan nan]
Run Code Online (Sandbox Code Playgroud)
与此不同:
>>> x = pylab.arange(5)
>>> x += pylab.nan
__main__:1: RuntimeWarning: invalid value encountered in add
>>> print x
[-9223372036854775808 -9223372036854775808 -9223372036854775808
-9223372036854775808 -9223372036854775808]
Run Code Online (Sandbox Code Playgroud)
?
基本上,是否已经有一个内置或常用的功能来执行此操作:
def rename_attribute(object_, old_attribute_name, new_attribute_name):
setattr(object_, new_attribute_name, getattr(object_, old_attribute_name))
delattr(object_, old_attribute_name)
Run Code Online (Sandbox Code Playgroud)