CaptainYY
CaptainYY
采纳率0%
2019-08-13 12:58 阅读 2.8k

Python中pygame大写Rect和小写rect分别表示什么意思

零基础学习Python,有疑惑,请大师们解疑:
1、pygame.Rect(left,top,width,height)和pygame.rect.Rect(left,top,width,height),Rect(left,top,width,height)三种写法分别是怎么解释的?
2、有点区分不清大写Rect和小写rect(Python中区分大小写?)
3、Rect/rect 是对象?还是方法,还是类?(完全弄混了。。。)

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2019-08-13 13:04

    Rect是类,跟着括号,那个是构造函数,rect是变量。

    点赞 3 评论 复制链接分享
  • Enderman_xiaohei 小黑LLB 2019-08-14 10:56

    (1)实际上 pygame.Rect 与 Rect 实际上是同一句话 => (pygame.)Rect。
    如果只 import pygame 的话,第一句不会报错,而第二句会报错。

    >>> import pygame
    >>> Rect
    Traceback (most recent call last):
      File "<pyshell#18>", line 1, in <module>
        Rect
    NameError: name 'Rect' is not defined
    >>> pygame.Rect
    <class 'pygame.Rect'>
    

    但是,如果像下面你这么做的话,两者都不会报错
    这要跟包管理和命名空间有关系,可以理解为把 Pygame 库中的 Rect 直接拉出来,作为全局变量

    >>> import pygame
    >>> from pygame import Rect
    >>> Rect
    <class 'pygame.Rect'>
    >>> pygame.Rect
    <class 'pygame.Rect'>
    

    而且我们可以发现,两者返回的一致。
    (2)pygame.Rect 与 pygame.rect.Rect 的关系问题
    我测试的结果,好像是一个东西。
    pygame 官方文档也没单独给出 pygame.rect 的说明

    >>> help(pygame.Rect)
    Help on class Rect in module pygame:
    
    class Rect(builtins.object)
     |  Rect(left, top, width, height) -> Rect
     |  Rect((left, top), (width, height)) -> Rect
     |  Rect(object) -> Rect
     |  pygame object for storing rectangular coordinates
     ...
     >>> help(pygame.rect.Rect)
    Help on class Rect in module pygame:
    
    class Rect(builtins.object)
     |  Rect(left, top, width, height) -> Rect
     |  Rect((left, top), (width, height)) -> Rect
     |  Rect(object) -> Rect
     |  pygame object for storing rectangular coordinates
     ...
     >>> pygame.rect.Rect(0, 0, 0, 0)
    <rect(0, 0, 0, 0)>
    >>> pygame.rect.Rect(0, 0, 0, 0) == pygame.Rect(0, 0, 0, 0)
    True
    >>> pygame.rect.Rect(0, 0, 0, 0) is pygame.Rect(0, 0, 0, 0)
    False
    >>> pygame.rect ==  pygame.Rect
    False
    >>> pygame.rect.Rect(0, 1, 2, 3).top
    1
    >>> pygame.Rect(0, 1, 2, 3).top
    1
    >>> pygame.rect.Rect(0, 1, 2, 3).size
    (2, 3)
    >>> pygame.Rect(0, 1, 2, 3).size
    (2, 3)
    >>> pygame.Rect(0, 2, 3, 4).move(1,1)
    <rect(1, 3, 3, 4)>
    >>> pygame.rect.Rect(0, 2, 3, 4).move(1,1)
    <rect(1, 3, 3, 4)>
    

    两者功能也基本一致。
    相关链接:Pygame中rect 初探
    个人见解就是二选一,如果真的有区别,我也不知道,看上好像都可以。

    (3)对于类和方法的区分
    在交互模式下,尝试用没有括号的语句进行

    >>> pygame.Rect
    <class 'pygame.Rect'>
    >>>pygame.rect.Rect
    <class 'pygame.Rect'>
    >>> pygame.rect.Rect(0, 2, 1, 2).move
    <built-in method move of pygame.Rect object at 0x00000193048D3AF8>
    >>> pygame.Rect(0, 2, 1, 2).move
    <built-in method move of pygame.Rect object at 0x0000019304FE2F08>
    

    可以理解为必须出现实例之后,对这个实例后续的.xxxx就是方法

    点赞 1 评论 复制链接分享

相关推荐