【问题标题】:When is a parameter necessary after selfself 之后什么时候需要参数
【发布时间】:2018-12-20 05:09:45
【问题描述】:

我是 python 新手,我有一个关于类的问题。创建一个类后,当你使用def init(self)时,什么时候需要self后面有参数。在一些 pygame 中,我看到有时它们包含有时不包含在下面的代码中,用于设置游戏(外星人入侵)和绘制一艘船:我很困惑为什么主程序中有一个屏幕参数定义显示,设置中没有参数。请解释一下,谢谢。

class Ship():
    def __init__(self, screen):

    # initializes the screen and set its starting postion
    self.screen = screen

    # now we load the image

    self.image = pygame.image.load("ship.bmp")
    self.rect = self.image.get_rect()
    self.screen_rect = screen.get_rect()

    # starting ship at each bottom of screen

    self.rect.centerx = self.screen_rect.centerx
    self.rect.bottom = self.screen_rect.bottom

def blitme(self):
    # drawing ship at its locations, use blitme
    self.screen.blit(self.image, self.rect)

class Settings():
    def __init__(self):
        self.screen_width = 1000
        self.screen_height = 700
        self.bg_color = (230, 230, 230)

【问题讨论】:

    标签: python python-3.x oop


    【解决方案1】:

    我想你会从一个简单的例子中受益。想想当你创建一个类的实例时。如果您只是将类构造函数保持为具有单个“self”参数,则不必提供任何参数。

    my_dog = Dog()
    

    但是,就像其他函数一样,您可能需要预先提供一些有关您正在创建的狗的信息。假设每当您想创建一个 Dog 对象时,您都想提供它的名称以及它是否吠叫和咬人。在设置你的狗类时,你可以在构造函数中指定在创建 Dog 类的实例时应该指定这些:

    class Dog(object):
        def __init__(self, name, barks, bites):
            self.name = name
            self.barks = barks
            self.bites = bites
    

    现在,当您创建类的实例时,您可以预先指定这些参数:

    my_dog = Dog('Rover', barks=True, bites=False)

    这意味着您可以控制在创建类的实例时需要传递哪些信息。在这种情况下,代码的作者想要在创建类的实例时使用与“屏幕”相关的一条信息。您编写的其他类可能不需要任何其他信息,因此它们只使用“自我”。

    就像编写函数时一样,您负责它们采用的参数,类的情况也完全一样。

    【讨论】:

      【解决方案2】:

      “self”之后的参数,如 self.image,允许您初始化对象“Ship”并在类外使用它。它定义了表征您的对象“Ship”的属性它允许您进行面向对象的编程(OOP) 你可以定义所有你想要的属性:

      self.speed = 10 
      

      如果你想初始化你的对象的移动速度。

      您可以查看此文档:class python

      但我认为您必须阅读面向对象的编程文档才能理解所有概念。在编程中,理解这一点非常重要。不仅适用于 Python,而且适用于所有语言。 (Java、C、C# ...)。

      【讨论】:

        【解决方案3】:

        方法就是函数。函数参数是可选的。函数是否应该有参数取决于函数的用途。每个功能都应针对特定任务而设计;有些可能需要论证,有些则不需要。

        Python 面向对象编程是这样设计的the first parameter of methods is the instance the method is called on。这使得可以像调用常规函数一样调用方法。使用 self 而不是 this_class_instance 只是一种约定,但为了便于阅读,您可能应该遵循这一约定。

        【讨论】:

          猜你喜欢
          • 2014-03-27
          • 1970-01-01
          • 2013-08-23
          • 1970-01-01
          • 1970-01-01
          • 2012-09-16
          • 1970-01-01
          • 2014-12-02
          • 1970-01-01
          相关资源
          最近更新 更多