Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在self之后何时需要参数_Python_Python 3.x_Oop - Fatal编程技术网

Python 在self之后何时需要参数

Python 在self之后何时需要参数,python,python-3.x,oop,Python,Python 3.x,Oop,我是python新手,我有一个关于类的问题。创建类之后,当您使用definit(self)时,需要在self之后添加参数。在一些pygame中,我看到它们有时包括,有时不包括,例如,在下面的游戏设置(外星人入侵)和绘制船只的代码中:我很困惑,为什么在定义显示的主程序中有一个屏幕参数,而在设置中没有参数。请解释一下,谢谢 class Ship(): def __init__(self, screen): # initializes the screen and set its s

我是python新手,我有一个关于类的问题。创建类之后,当您使用definit(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)
参数,允许您初始化对象“Ship”并在类外使用它。它定义属性来描述对象“Ship”,它允许您进行面向对象编程(OOP) 您可以定义所需的所有属性,如:

self.speed = 10 
如果要初始化对象的移动速度

您可以检查此文档:


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

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


Python面向对象编程就是这样设计的。这使得方法可以像常规函数一样被调用。使用
self
而不是
这个类实例
只是一种惯例,但为了可读性,您可能应该遵循这种惯例。

我认为您只需要一个简单的示例就可以获益。请考虑创建类实例的时间。如果只将类构造函数保持为具有单个“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)

这意味着您可以控制在创建类实例时需要传递哪些信息。在本例中,代码作者希望在创建类实例时使用与“屏幕”相关的信息。您编写的其他类可能不需要任何附加信息,因此它们只使用“self”

就像编写函数一样,您负责它们采用的参数,而类也是如此