于末 2022-03-30 16:07 采纳率: 80%
浏览 87
已结题

Python中有self.属性名 = 其他模块类名(self)的语法吗?这种语法如何理解呢?

问题遇到的现象和发生背景

Python中有self.属性名 = 其他模块类名(self)的语法吗?这种语法如何理解呢?

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

求指教

import pygame  # 导入游戏库game
import sys

from settings import Stiings # 导出参数类
from ship import Ship


class AlienInvasion(object):
    def __init__(self):
        """初始化游戏资源"""
        pygame.init()

        self.stiings = Stiings() # 将设置类赋值给初始化属性:self.stiings

        self.screen = pygame.display.set_mode((self.stiings.screen_width, self.stiings.screen_height))
        # pygame.display.set_mode创建一个显示窗口,让所有的图像元素都在里面绘制。
        # (1200, 800)是一个元组,定义了游戏窗口的尺寸,单位像素。并将这个值赋值给self.screen.使整个类都可以使用此属性

        pygame.display.set_caption("外星人入侵!")
        # 这是设置有序屏幕的标题

        # self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))

       self.ship = Ship(self)
        """请注意,此处在创建一个名称self.ship实例的同时。Ship()初始化缺少参数,需要当前类(AlienInvasion)将资源传递给self.ship,
        故加上Ship(self)。如:self.screen或者其他变量,self.ship实例在引用时,在初始化名称后面加上变量名称即可。
        """

        # self.bg_color = (230,230,230) 
        # 设置屏幕颜色,在pygame中的颜色是以rgb指定的,这种颜色由红色、绿色、蓝色组成。其中每一个的值的取值范围都是:0-255.
        # (0,255,0)绿色,(255,0,0)红色。(0,0,255)蓝色。我们将设计好的颜色赋值给:self.screen.fill()。让它使用我们设置的颜色

    def run_game(self):
        """开启游戏的主循环"""

        while True:

            # 监视鼠标和键盘的事件。意思是监控鼠标和键盘的操作
            for event in pygame.event.get():  # pygame.event.get这个函数包含它在上次调用后发送的所有事件(操作)
                # pygame.event.get()会生成一个列表,记录之前的所以时间进行for循环,并结合if语句判断是否需要执行以下的代码
                if event.type == pygame.QUIT:
                    sys.exit() # 监控到用户操作pygame.QUIT退出,则运行下面退出方法

            self.screen.fill(self.stiings.bg_color)
            # ,我们见设置好的颜色填充到屏幕中(窗口)。fill()只接收一个实参:一种颜色

            self.ship.blitme()

            # 让最近绘制的屏幕可见,每执行一次,会擦去旧屏幕,使得只展示新屏幕可见
            pygame.display.flip()


if __name__ == '__main__':
    # 创建游戏实例,并运行游戏
    ai = AlienInvasion()
    ai.run_game()


"""创建一个飞船类Ship"""
import pygame


class Ship(object): 
    """管理飞船的类"""

    def __init__(self, ai_game):
        """初始化飞船并设置初始化位置"""
       self.screen = ai_game.screen
        self.screen_rect = ai_game.screen.get_rect()  
        """此处需要注意,初始化时由于指向了AlienInvasion类,所以可以从AlienInvasion获取已存在的变量
        自定义变量 = 初始化名称.自主类变量名称(无需加self)。如:self.xxxx = ai_game.screen
        """

        # 加载飞船图像并获取其外接矩形
        self.image = pygame.image.load("images/ship.bmp")  # load
        # 属性名 = pygame.image.load("xx") 加载图片
        self.rect = self.image.get_rect()
        #self.rect = self.image.get_rect()是因为self.rect。要做知道图片矩形大小,以便后面根据当前大小定位所在位置

        # 对于没艘新飞船,都将其放在屏幕底部的中央
        self.rect.midbottom = self.screen_rect.midbottom
        # self.rect.midbottom = self.screen_rect.midbottom。要知道屏幕矩形大小于,同时确认居中坐标

        if self.screen_rect.midbottom == self.rect.midbottom:
            print("两个值相等")
            print(self.rect.midbottom)

    def blitme(self):
        """在指定位置绘制飞船"""
        self.screen.blit(self.image,self.rect) # blit位置


  • 写回答

3条回答 默认 最新

  • ash062 2022-03-30 16:41
    关注

    给你造了一个

    class Simple:
        def __init__(self, S):
            self.p = S*(self)
        def __rmul__(self, a):
            return 'Are you ok?'
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 修改了问题 3月31日
  • 修改了问题 3月31日
  • 展开全部

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效