python:重写访问var

发布于 2024-09-11 13:09:05 字数 471 浏览 6 评论 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)

我尝试覆盖 __get__ 但这是不正确的。

我发现你可以通过子类化 str 来做到这一点,但是有没有办法不使用它呢?

I have a class:

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

now I want this class to have the functionality of a string whenever it can. That is:

a = A()
print a.b

will print b's value. But I want functions that expect a string (for example replace) to work. For example:

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

to actually do:

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

I tried overidding __get__ but this isn't correct.

I see that you can do this by subclassing str, but is there a way without it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

ˇ宁静的妩媚 2024-09-18 13:09:05

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

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

If you want your class to have the functionality of a string, just extend the built in string class.

>>> class A(str):
...     b = 'some other value'
...
>>> a = A('x')
>>> a
'x'
>>> a.b
'some other value'
>>> 'aaa'.replace('a',a)
'xxx'
许仙没带伞 2024-09-18 13:09:05

我在 使用多个 __init__ 参数子类化 Python 元组 中找到了答案。

我使用了 Dave 的解决方案并扩展了 str,然后添加了一个 new 函数:

def __new__(self,a,b):
    s=a
    return str.__new__(A,s)

I found an answer in Subclassing Python tuple with multiple __init__ arguments .

I used Dave's solution and extended str, and then added a new function:

def __new__(self,a,b):
    s=a
    return str.__new__(A,s)
意犹 2024-09-18 13:09:05

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

Override __str__ or __unicode__ to set the string representation of an object (Python documentation).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文