首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在不调用初始化器的情况下创建一个类实例?

如何在不调用初始化器的情况下创建一个类实例?
EN

Stack Overflow用户
提问于 2010-01-31 02:41:37
回答 4查看 36.6K关注 0票数 37

有没有办法避免在初始化类时调用__init__,比如从类方法中调用?

我试图用Python语言创建一个不区分大小写和标点符号的字符串类,用于有效的比较,但在不调用__init__的情况下创建一个新实例时遇到了问题。

代码语言:javascript
复制
>>> class String:

    def __init__(self, string):
        self.__string = tuple(string.split())
        self.__simple = tuple(self.__simple())

    def __simple(self):
        letter = lambda s: ''.join(filter(lambda s: 'a' <= s <= 'z', s))
        return filter(bool, map(letter, map(str.lower, self.__string)))

    def __eq__(self, other):
        assert isinstance(other, String)
        return self.__simple == other.__simple

    def __getitem__(self, key):
        assert isinstance(key, slice)
        string = String()
        string.__string = self.__string[key]
        string.__simple = self.__simple[key]
        return string

    def __iter__(self):
        return iter(self.__string)

>>> String('Hello, world!')[1:]
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    String('Hello, world!')[1:]
  File "<pyshell#1>", line 17, in __getitem__
    string = String()
TypeError: __init__() takes exactly 2 positional arguments (1 given)
>>> 

我应该用什么替换string = String(); string.__string = self.__string[key]; string.__simple = self.__simple[key],才能用切片初始化新对象?

编辑:

由于受到以下答案的启发,初始化器已被编辑为快速检查无参数。

代码语言:javascript
复制
def __init__(self, string=None):
    if string is None:
        self.__string = self.__simple = ()
    else:
        self.__string = tuple(string.split())
        self.__simple = tuple(self.__simple())
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2168964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档