我是python的新手,我对类有疑问。创建完一个类之后,当您使用def init (self)时,何时有必要在self之后加上参数。在某些pygame中,我看到它们有时包括但有时不包括在以下代码中,这些代码用于游戏设置(Alien Invasion)和绘制飞船:我很困惑为什么在主程序中有一个screen参数定义显示,并且设置中没有参数。请解释,谢谢。
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)
答案 0 :(得分:0)
参数(如self.image),允许您初始化对象“ Ship”并在类外使用它。它定义属性来表征对象“ Ship”。它允许您进行面向对象的编程(OOP) 您可以定义所有想要的属性:
self.speed = 10
如果要初始化对象的移动速度。
您可以查看此文档:class python
但是我认为您必须阅读面向对象的编程文档才能理解所有概念。在编程中,了解这一点非常重要。不仅适用于Python,而且适用于所有语言。 (Java,C,C#...)。
答案 1 :(得分:0)
方法是一种功能。功能参数是可选的。函数是否应具有参数取决于函数的用途。每个功能应针对特定任务而设计;有些人可能需要争论,而另一些人可能不需要。
Python面向对象的程序设计为the first parameter of methods is the instance the method is called on。这样就可以像常规函数一样调用方法。使用#import <Foundation/Foundation.h>
int main (int argc, const char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
if (argc < 2) {
// Use ~/Application directory if no command line arguments are provided
NSString *localizedApplicationDirectoryName = [[NSFileManager defaultManager] displayNameAtPath:NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSLocalDomainMask, YES).lastObject];
NSLog(@"%@", localizedApplicationDirectoryName);
[pool drain];
return 1;
}
// Use command line arguments
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSString *directory = [NSString stringWithUTF8String:argv[1]];
NSString *displayName = [fileManager displayNameAtPath:directory];
NSLog(@"%@", displayName);
[pool drain];
return 0;
}
而不是self
只是一种约定,但是为了便于阅读,您可能应该遵循该约定。
答案 2 :(得分:0)
我认为您将从一个简单的示例中受益。考虑一下何时创建类的实例。如果只将类构造函数保留为具有单个“ 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”。
就像编写函数时一样,您要负责它们所采用的参数,而类的情况则完全相同。