2010-07-26 57 views
0

我有一个类:蟒蛇:重载访问的变种

class A: 
    s = 'some string' 
    b = <SOME OTHER INSTANCE> 

现在我想这个类来时,它可以有一个字符串的功能。即:

a = A() 
print a.b 

将打印b的值。但我想要的功能,预计一个字符串(例如replace)工作。例如:

'aaaa'.replace('a', a) 

真正做到:

'aaa'.replace('a', a.s) 

我试图overidding __get__但这是不正确的。

我看到你可以通过子类str来做到这一点,但有没有办法吗?

+2

有你_don't_想从'str'继承理由吗?这将是正确的做法。 – katrielalex 2010-07-26 08:41:16

+0

好吧,正如问题的标题所说,这是一个更普遍的问题。这个解决方案很好,但我认为重写“访问变量”会派上用场。 – Guy 2010-07-26 10:05:43

回答

1

覆盖__str____unicode__以设置对象的字符串表示形式(Python documentation)。

+0

这没有帮助。 – Rivka 2010-07-26 08:09:26

+0

然后使用Dave的解决方案,它应该支持整个字符串功能。我的解决方案只适用于一小部分。 – 2010-07-26 08:12:05

7

如果您希望您的类具有字符串的功能,只需扩展内置的字符串类即可。

>>> class A(str): 
...  b = 'some other value' 
... 
>>> a = A('x') 
>>> a 
'x' 
>>> a.b 
'some other value' 
>>> 'aaa'.replace('a',a) 
'xxx'