0 python ironpython class list
我对 python 很陌生,所以我创建了一个元素列表,如:
main_list = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
我希望这个列表有一个名字,但我不想使用字典,所以我创建了一个以名字作为属性的类:
class NamedList:
def __init__(self, name, obj)
self.name = name
self.object = obj
Run Code Online (Sandbox Code Playgroud)
当我尝试访问第一个列表的长度时:
len(main_list) #works fine
Run Code Online (Sandbox Code Playgroud)
但对于第二个,它给了我这个
错误:NamedList 实例没有属性“ len ”:
new_main_list = NamedList('numbers', main_list)
len(new_main_list) #This line gives me the error
Run Code Online (Sandbox Code Playgroud)
我想知道为什么 List 类的基本属性对我的类不可用?我所有的实例最初都是一个 List 实例。
提前致谢
您可以创建一个 的子类,list它将继承所有列表方法,包括.__len__().
class NamedList(list):
def __init__(self, name, iterable):
super().__init__(iterable)
self.name = name
Run Code Online (Sandbox Code Playgroud)
所有的实例最初都是列表实例,那么为什么列表类的方法对它们不起作用,为什么我必须定义一个子类?
有一个列表属性是不一样的是列表。想想len()如果您有多个列表属性或没有列表应该怎么做。您没有公开所需的接口。该len()内建的工作原理是调用.__len__()的对象,但你的原班没有这个方法。相反,它已经.object.__len__(),换句话说,它有一个列表对象,并认为有必要的方法。len(new_main_list)不工作,但len(new_main_list.object)会。
另一方面,子类继承其父类 ( list)的属性。如果属性查找NamedList失败,它将尝试在 上查找它list,它有.__len__(),所以它可以工作。