Python:具有程序员定义属性的文件

1 投票
3 回答
614 浏览
提问于 2025-04-15 18:21

我在用Python 2.5的时候,想创建一个临时文件,还想添加(和修改)我自己的属性。我试过下面的代码:

class  TempFileWithAttributes ( ) :
    __slots__   =   [   '_tempFile' ,  'Value'  ]
    def __init__ ( self ) :
        self._tempFile  =  tempfile.TemporaryFile()
        object.__setattr__ ( self, '_tempFile', tempfile.TemporaryFile() )
        object.__setattr__ ( self, 'Value', 123 )
    def __getattr__ ( self, name ) :
        if  name  ==  'Value' :
            object.__getattr__ ( self, 'Value' )
        elif  name  ==  '_tempFile' :
            return  getattr ( self._tempFile, name )
    def __setattr__ ( self, name, newValue ) :
        if name == 'Value' :
            object.__setattr__ ( self, 'Value', newValue )
        elif  name == '_tempFile' :
            setattr ( self._tempFile, newValue )

myFile  =  TempFileWithAttributes ( )
myFile.write ( 'Hello, Jayson!' )
print myFile.Value
myFile.Value  =  456
print myFile.Value
myFile.seek ( 0, os.SEEK_END )
print myFile.tell()

但是,我遇到了以下错误信息:

object.__setattr__ ( self, '_tempFile', tempfile.TemporaryFile() )
TypeError: can't apply this __setattr__ to instance object

我也尝试过继承file这个类,但也没有成功。

有没有什么建议呢?

3 个回答

0

第一步:用 setattr() 来代替 object.__setattr__()

第二步:不要用 setattr(anobject, 'string', value),直接用 anobject.string = value 就可以了

因为你的代码完全没有逻辑。我甚至搞不清楚你想要做什么。

2

Python 报错是因为 object.__setattr__ (self, 'Value', newValue ) 这行代码中的 self 不是一个 object 对象。

你需要让你的类继承自 object:

class  TempFileWithAttributes(object):

在 Python3 中,所有类默认都会继承自 object,但在 Python2 中就不是这样。

2

你为什么要重写 __setattr__ 呢?这完全没有什么实际用处。而且你重写的 __getattr__ 也没什么帮助。我觉得你可能想要的是这样的东西:

>>> class  TempFileWithAttributes(object):
...   __slots__ = ['_tempFile', 'Value']
...   def __init__(self):
...     self._tempFile  =  tempfile.TemporaryFile()
...     self.Value = 123
...   def __getattr__(self, name):
...     return getattr(self._tempFile, name)
... 

这样做可以让你其他的代码正常运行,应该是你想要的效果。

撰写回答