【发布时间】:2014-09-01 07:47:53
【问题描述】:
每当我们在 Java 中需要一个新对象时,我们都会声明类型和名称来选择是否给它一个初始值。在 Python 中我们不能这样做,因为我们不声明类型。
如果没有声明类型,我该如何解决这个问题;我没有收到任何代码完成提示。就像特定对象的字段或我们可以在对象上调用的任何方法......
class Album:
def __init__(self, name, Photo, next):
self.name = name
self.Photo = None
self.next = next
def __str__(self):
return "Album name is: " + self.name
class Photo:
def __init__(self, name, caption, Tag, next):
self.name = name
self.caption = caption
self.Tag = Tag
self.next = next
def __str__(self):
return "Photo name is: " + self.name + " with caption: " + self.caption
class Tag:
def __init__(self, type, info, next):
self.name = type
self.info = info
self.next = next
def __str__(self):
return "Photo name is: " + self.name
def addPhoto(toEdit, photoName, caption):
if isinstance(toEdit, Album):
if toEdit.Photo is None:
toEdit.Photo = Photo(photoName, caption, None, None)
else:
tempPhoto = toEdit.Photo
prev = None
isFound = False
while tempPhoto != None:
if tempPhoto.name.lower() == photoName.lower():
isFound = True
break
prev = tempPhoto
tempPhoto = tempPhoto.next
if isFound == False:
prev.next = Photo(photoName, caption, None, None)
else:
print("Photo " + photoName + " already exists in " + toEdit.name)
def deletePhoto(toEdit, photoName):
if isinstance(toEdit, Album):
if photoName in toEdit.Photo.name:
if toEdit.Photo.next is not None:
toEdit.Photo = toEdit.Photo.next
return True
else:
toEdit.Photo = None
return True
else:
Photo = toEdit.Photo.next
Photo_prev = None
while Photo is not None:
if Photo.name in photoName:
prev.next = Photo.next
prev = Photo
Photo = Photo.next
print("Removed photo: " + photoName + " from " + toEdit.name)
pPtr = album1.Photo
while (pPtr != None):
print(pPtr)
pPtr = pPtr.next
因此,每当我尝试执行 pPtr = album1.Photo 然后尝试访问该 pPtr 对象的任何字段时,我在 PyCharm 中都没有得到任何建议。我需要知道我做错了还是 PyCharm 有问题。
实现是一个巨大的链表。 Albums 节点包含 Photo 节点,其中包含 Tag 节点
【问题讨论】:
-
Annotations 可能会对您有所帮助
-
请注意,在 Python 中,将变量保留为小写通常是明智之举。例如,您有一个类
Tag和一个变量Tag,这会混淆情况。 (它甚至混淆了这里的语法荧光笔)。 -
什么是专辑 1?如果您想创建 Photo 的实例,只需键入 pPtr = Photo() 然后您可以调用 pPtr.name 例如。请更改该变量名称 pPtr
-
Stop writing classes in Python。在 Java 中,您必须创建类,因为没有别的。你说“实现是一个巨大的链表”,每个链表有其他类实例。你不应该在 Python 中使用链表。记住类实例只是字典也很重要。
-
不幸的是,您遇到了鸭子打字的痛处之一。
标签: python pycharm type-hinting