【问题标题】:Why do classes need arguments (argument) if I can simply add as many self.agrument after the __init__ as I need?如果我可以根据需要在 __init__ 之后简单地添加尽可能多的 self.argument,为什么类需要参数(参数)?
【发布时间】:2019-08-03 13:34:59
【问题描述】:

就像下面的例子,我的类只包含了默认的self,其他的都添加在init方法下。

class Settings():
def __init__(self):
'''screen settings'''
    self.screen_width = 1200
    self.screen_height = 800
    self.bg_color = (230,230,230)

【问题讨论】:

  • 如果您希望所有实例在创建时具有完全相同的属性值,那很好 - 但通常您希望能够创建具有不同属性的实例。
  • 您可以对函数或几乎整个程序本身提出相同的问题,然后您可能会找到您正在寻找的答案
  • 我会阅读面向对象的设计和静态类、函数和成员。您可能希望创建一个静态类而不是实例化类(对象是这种类的一个实例)。静态类允许您将类似使用的代码组合在一起,而无需创建对象,因此无需将其与同一数据块相关联。通常,您将不同的数据传递给不同的对象,这就是您使用参数构造对象的原因。在静态类中,您可能拥有在静态方法中引用的常量数据,就像您正在做的那样。

标签: python class init


【解决方案1】:

它们不是你的类的参数,因为它们是类变量,可以由该类中的其他函数访问,但不能在该类之外使用,如果你想从一个参数中创建一个变量使用它会是

def __init__(self, fname, lname):
    self.firstname = fname
    self.lastname = lname

它们可以称为相同的事物,也可以称为不同的事物。 如果你想从该类中的另一个函数访问它们,你就是这样做的

def __init__(self, name):
    self.name = name

def print_name(self):
    print(self.name)

您拥有self. 的原因是为了更容易管理变量和跟踪,self 参数被传递给第二个函数,因此它能够使用声明为类变量的变量。

【讨论】:

  • 所以参数具有固定值,如果我不在 init 方法中声明它们,我不能在类本身之外更改它们?例如self.screen_width = 1200 只能是 1200 除非我回到课堂并更改它,但是如果我写 __init__(self, screen_width) 我可以在课堂外更改它吗? ...这就是重点吗?
  • 是的,您还可以在声明的同一类中的另一个函数中更改变量值,如果在调用类时将变量作为参数,您可以确定变量值像这样的类声明 Name("bob").print_name() 从我的回答这将打印出 bob
猜你喜欢
  • 2014-03-19
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多