[英]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.