#python #scope
#python #область
Вопрос:
Я работаю над игрой под названием Scuba Adventure, и при попытке найти источник ошибки атрибута я получил другую ошибку, говорящую что-то вроде «тени объекта из внешней области». Я обнаружил, что источником ошибки является отступ. При определении класса с именем Bubble, который управлял объектом bubble и группой sprite, я случайно сделал отступ в методах внутри def __init__()
. Мой класс был примерно таким:
import pygame
from pygame.sprite import Sprite
class Bubble(Sprite):
"""A class that manages bubbles released from the diver."""
def __init__(self, sa_game):
"""create a bubble object at the diver's current position."""
super().__init__()
"""Some attributes"""
"
"
# import the bubble image
"""Code to import the bubble image"""
# Store the bubble's position as a decimal value
""" """
def update(self):
"""Move the bubble up the screen."""
# Method to update the decimal position of the bubble
def blit_bubble(self):
"""Method to draw the bubble at the diver's current location"""
Сами тела функций не имеют значения. Но мне интересно, что означает «затенение из внешней области» и почему ошибка отступа может вызвать это. Я все еще новичок, поэтому эта концепция может быть новой для меня
Ответ №1:
Это означает, что методы существовали в двух местах, и те, что внутри __init__
, переопределяли бы (shadow) любое определение, которое у них было за пределами этой области.
Комментарии:
1. Является ли это частью базового Python? Я предполагаю, что это из Pygame
2. Ах, вместо этого это похоже на линтинг, и я объединил «ошибку» с предупреждением. nm
3. Это из Pygame
4. @tripleee, итак, метод update (), который я получаю, что это приведет к затенению, потому что я использовал другие функции update () в других классах. Но blit_bubble() — это метод, уникальный для этого класса, отличный от вызова функции в основном цикле. Значит, в этом случае blit_bubble() также будет затенен?
5. Если нет другого определения, то технически нет, но статический анализатор кода может быть не в состоянии исключить возможность того, что существует другое определение, хотя он его не видит, или корректно, но слегка вводящее в заблуждение предупреждение о затенении неопределенной ссылки.