继承期间未解析的引用
Unresolved reference during inheritance
import pygame
from pygame.sprite import Sprite
class FooObject(Sprite):
def __init__(self):
Sprite.__init__(self)
def do_stuff(self):
...doing stuff
objects = pygame.sprite.Group()
my_obj = FooObject()
objects.add(my_obj)
for obj in objects:
obj.do_stuff()
代码运行良好。然而,最后一行 Pycharm 给了我一个警告:
未解析的属性引用 'do_stuff' class 'Sprite'
很好理解,通常我会在超class中放置一个占位符方法,它会被继承class覆盖。但是,Sprite class 不是我的,我不想弄乱它,那么这里推荐的操作步骤是什么?忽略警告?
您可以在调用之前检查该方法是否存在:
for obj in objects:
if hasattr(obj, 'do_stuff'):
obj.do_stuff()
或
for obj in objects:
if isinstance(obj, FooObject):
obj.do_stuff()
其中 FooObject
可能是拥有 do_stuff
成员的所有 children 中的 child class。
编辑:
从评论中可以创建一个名为 ActiveStripe
的中间摘要 class 来对所有具有 do_stuff
成员的后代进行分组。
import pygame
from pygame.sprite import Sprite
class FooObject(Sprite):
def __init__(self):
Sprite.__init__(self)
def do_stuff(self):
...doing stuff
objects = pygame.sprite.Group()
my_obj = FooObject()
objects.add(my_obj)
for obj in objects:
obj.do_stuff()
代码运行良好。然而,最后一行 Pycharm 给了我一个警告:
未解析的属性引用 'do_stuff' class 'Sprite'
很好理解,通常我会在超class中放置一个占位符方法,它会被继承class覆盖。但是,Sprite class 不是我的,我不想弄乱它,那么这里推荐的操作步骤是什么?忽略警告?
您可以在调用之前检查该方法是否存在:
for obj in objects:
if hasattr(obj, 'do_stuff'):
obj.do_stuff()
或
for obj in objects:
if isinstance(obj, FooObject):
obj.do_stuff()
其中 FooObject
可能是拥有 do_stuff
成员的所有 children 中的 child class。
编辑:
从评论中可以创建一个名为 ActiveStripe
的中间摘要 class 来对所有具有 do_stuff
成员的后代进行分组。