2017-09-03 36 views
0

我有一个关于Python如何知道某些事情的问题。例如,当我写用特殊符号调用对象python 3

a_list = ["car", "plane"] 
print(a) 

Python知道a_list是一个列表。这是如何运作的?它在python的默认模块中写入哪里?

我想创建工作有点像一个列表的对象,但是当我想获得在特定位置的项目,我就想写

object_list[0] 

,而不是一个方法类似

object_list.obtain_item(0) 

而且我希望创建一个对象做这样的事情

$"car", "plane"$ 
# like yo do ["car", "plane"] by default 

,我可以”从列表中继承,导致它在我正在处理的项目中被禁止。

这甚至可能吗?我在这里和在互联网上搜索,但我甚至不能用言语来回答我的问题以便正确搜索。

回答

0

要回答你的第一个问题,这将是实施__getitem__方法的结果。

class Foo(): 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

    def __getitem__(self, ind): 
     if ind == 0: 
      return self.x 
     return self.y 

x = Foo(1, 2) 
print(x[0]) 
1 

print(x[1]) 
2 

请注意,这是一个非常裸露的实现,我没有使用过一个列表,因为你说你不能使用它。

要回答你的第二个问题,这将涉及到对语言的基本语法和语法进行更改,作为该语言的最终用户,你目前无权做到这一点。

+0

谢谢,__getitem__正是我正在寻找的方法 – Bneya

0

Python知道a_list是一个列表。这是如何运作的? 在Python的默认模块中写入了哪里?

Python解释器识别list文字,然后创建一个列表对象。 Python列表对象是“构建到解释器中的标准类型”的一部分。

我想创建工作有点像一个列表的对象,但是当我 想获得在特定位置的项目,我希望写

你可以做到这一点使用object.getitem(self, key) 。互联网上有很多有用的例子。

,我会想创建一个对象,做这样的事情

$ “汽车”, “面” $

喜欢哟做[ “汽车”, “面”]默认

如果你不想改变Python解释器,你可以有一个较少的“native/hardcore”解决方案来解析字符串并创建你自己想要的对象。,像这样:

>>> def my_parser(s): 
...  return [i.strip('"') for i in s.strip('$').split(', ')] 
... 
>>> my_parser('$"car", "plane"$') 
['car', 'plane'] 
>>>