下面给出了PortDataState类的以下python代码。在
class PortDataState(dict):
# dict: Port class -> PortData class
# slimed down version of OrderedDict as python 2.6 doesn't support it.
_PREV = 0
_NEXT = 1
_KEY = 2
def __init__(self):
super(PortDataState, self).__init__()
self._root = root = [] # sentinel node
root[:] = [root, root, None] # [_PREV, _NEXT, _KEY]
# doubly linked list
self._map = {}
def _remove_key(self, key):
link_prev, link_next, key = self._map.pop(key)
link_prev[self._NEXT] = link_next
link_next[self._PREV] = link_prev
def _append_key(self, key):
root = self._root
last = root[self._PREV]
last[self._NEXT] = root[self._PREV] = self._map[key] = [last, root,
key]
def _prepend_key(self, key):
root = self._root
first = root[self._NEXT]
first[self._PREV] = root[self._NEXT] = self._map[key] = [root, first,
key]
def _move_last_key(self, key):
self._remove_key(key)
self._append_key(key)
def _move_front_key(self, key):
self._remove_key(key)
self._prepend_key(key)
def add_port(self, port, lldp_data):
if port not in self:
self._prepend_key(port)
self[port] = PortData(port.is_down(), lldp_data)
else:
self[port].is_down = port.is_down()
def lldp_sent(self, port):
port_data = self[port]
port_data.lldp_sent()
self._move_last_key(port)
return port_data
def lldp_received(self, port):
self[port].lldp_received()
def move_front(self, port):
port_data = self.get(port, None)
if port_data is not None:
port_data.clear_timestamp()
self._move_front_key(port)
def set_down(self, port):
is_down = port.is_down()
port_data = self[port]
port_data.set_down(is_down)
port_data.clear_timestamp()
if not is_down:
self._move_front_key(port)
return is_down
def get_port(self, port):
return self[port]
def del_port(self, port):
del self[port]
self._remove_key(port)
def __iter__(self):
root = self._root
curr = root[self._NEXT]
while curr is not root:
yield curr[self._KEY]
curr = curr[self._NEXT]
def clear(self):
for node in self._map.itervalues():
del node[:]
root = self._root
root[:] = [root, root, None]
self._map.clear()
dict.clear(self)
def items(self):
'od.items() -> list of (key, value) pairs in od'
return [(key, self[key]) for key in self]
def iteritems(self):
'od.iteritems -> an iterator over the (key, value) pairs in od'
for k in self:
yield (k, self[k])
在另一个类中,我实例化了PortDataState的一个对象,如下所示
^{pr2}$我对Python很陌生,我想知道什么是Python自身端口包含?我真的不明白PortDataState的__init__
函数在做什么上面。具体地说做什么
def __init__(self):
super(PortDataState, self).__init__()
self._root = root = [] # sentinel node
root[:] = [root, root, None] # [_PREV, _NEXT, _KEY]
# doubly linked list
self._map = {}
卑鄙?在
Python有非常有用的
dir()
函数。 如果要获取对象内容,请写下:Python中的
__init__
函数和其他语言一样是构造函数方法。此方法初始化类字段(但是__init__
方法不是创建对象本身,__init__
只在对象被创建后修改)。在write PortDataState()时(即对象实例化时)自动执行对象创建。在至于你的案件对象自身端口将包含dict类包含的所有方法和变量(因为PortDataStates继承自dict)。此外,您的对象将包含:
_PREV
,_NEXT
,_KEY
变量(它是一个静态变量,将在PortDataState类的每个对象之间共享)_root
,_map
-某种“受保护”的成员(如果您使用IDE,例如PyCharm,它会警告您,如果您试图在类之外访问这些成员之一,那么这些成员将受到保护)。但实际上在执行过程中Python并没有阻止您访问以“”字符开头的成员。(所以这只是惯例)。在link_prev
,first
等不会出现在对象中,因为它不是以关键字self
开头的。self
是对象本身。在__init__
初始化用户定义的类,以便可以按预期使用它。在在这个例子中
__init__
被调用self
)的_root
和_map
属性被设置,以便以后可以在其他方法中使用它们。在在实例化此类的新对象(实例)时调用该函数。在
怎么了
是实例化了
PortDataState
类的一个新对象,因此调用了__init__
方法。在相关问题 更多 >
编程相关推荐