【发布时间】:2017-06-19 00:55:29
【问题描述】:
是否可以在自身(在 python 中)创建一个类的新对象?
为了更详细地解释这个想法,我编写了这段代码,我认为它不起作用。
新对象应该明显独立于当前对象(新属性等)
class LinkedList:
def __init__(self):
""" Construct an empty linked list. """
self.first = None
self.last = None
def insert_before(self, new_item, next_item):
""" Insert new_item before next_item. If next_item is None, insert
new_item at the end of the list. """
# First set the (two) new prev pointers (including possibly last).
if next_item is not None:
new_item.prev = next_item.prev
next_item.prev = new_item
else:
new_item.prev = self.last
self.last = new_item
# Then set the (two) new next pointers (including possibly first).
if new_item.prev is not None:
new_item.next = next_item
new_item.prev.next = new_item
else:
new_item.next = self.first
self.first = new_item
# assuming l1, l2 obj of class node with prev and next (attributes)
def slice(self, l1, l2):
curr = l1
new = LinkedList()
new.first = l1
new.last = l2
if l1.prev is not None:
l2.prev = l1.prev
else:
self.first = l2.next
self.first.prev = None
if l2.next is not None:
l1.next = l2.next
else:
self.last = l2.next
Return new
class Node:
def __init__(self, value):
""" Construct an item with given value. Also have an id for each item,
so that we can simply show pointers as ids. """
Node.num_items += 1
self.id = Node.num_items
self.prev = None
self.next = None
self.value = value
def __repr__(self):
""" Item as human-readable string. In Java or C++, use a function like
toString(). """
return "[id = #" + str(self.id) \
+ ", prev = #" + str(0 if self.prev is None else self.prev.id) \
+ ", next = #" + str(0 if self.next is None else self.next.id) \
+ ", val = " + str(self.value) + "]"
【问题讨论】:
-
您显示的代码确实创建了一个完全独立的
test实例。尽管该示例有点毫无意义,因为test无论如何都没有任何属性。为什么你认为它不起作用?你打算用new做什么? (顺便说一句,你的__init__有语法错误。) -
您的代码运行良好。你试过了吗?
-
@5gon12eder 因为我尝试了真实代码,并尝试更改属性值,但没有成功
-
请务必发布minimal reproducible example,而不是您拥有的完整程序。花时间将您的代码缩减到尽可能小的大小,同时仍然表现出您所询问的行为。
-
我认为它行不通...请详细解释为什么不行。
标签: python oop linked-list