繁体   English   中英

如何在__init__上创建__len__函数?

[英]How create a __len__ function on __init__?

如何删除此对象中的__size属性?

class Object():
    def __init__(self, size):
        self.__size = size

    def __len__(self):
        return self.__size

初始化函数如何创建len函数? Lambda函数?

PS:在我的实际情况下,我需要对该len函数进行一些计算,但是实例化之后的结果始终是相同的(例如,像元组)。 将结果保存到没有任何隐藏属性的函数中可能会很棒。

我不建议这样做,但是您可以使用简单的lambda函数

class Object():
    def __init__(self, size):
        self.__len__ = lambda: size


>>> len(Object(3))
3

我不推荐这样做的原因已归入Python的Zen中:显式优于隐式。 简单胜于复杂。

如果使用实例变量,那么它是显式的,可以更好地跟踪错误,可以在__len__函数中使用doctests,并且在读取和更新它时,代码也更容易理解。

由于不可能让__len__作为实例属性以便通过len() ,因此必须在类中定义它。 但是由于没有其他限制,因此可以定义实例属性__len__以使名称空间不会受到污染。

class MyObject(object):
    def __init__(self, size):
        self.__len__ = lambda: size
    def __len__(self):
        return self.__len__()

这看起来令人困惑(并且可能因此而废止),但是它可以工作。

它的工作原理,因为类属性__len__()作为def -ed函数,调用实例属性__len__()它是从拉姆达__init__()

展示了可能的方法后,我不建议这样做,因为它可能会非常令人困惑。

您原来的解决方案要好得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM