通过Python中的函数设置对象属性

通过Python中的函数设置对象属性,python,python-3.x,oop,inheritance,Python,Python 3.x,Oop,Inheritance,我很少有面向对象编程的经验,特别是在Python方面。我有两门课: def set_other_values(data): self.apple = "data" class Something(Else): def __init__(self, **kwargs): super.__init__(**kwargs) self.apple = '' self.mango = '' def something_f

我很少有面向对象编程的经验,特别是在Python方面。我有两门课:


def set_other_values(data):
   self.apple = "data"

class Something(Else):
   def __init__(self, **kwargs):
       super.__init__(**kwargs)
       self.apple = ''
       self.mango = ''

   def something_function(self):
       // Python Code

class Anything(Something):
   def construct(self):
       self.mango = "10 Mangoes"
       set_other_values(data)  
       self.something_function()
根据我的理解,当实例化
任何东西时,它首先从
某物
调用
\uu init()。然后在
Anything
的构造函数中初始化变量,我们也可以在那里调用一些父函数

还有更多的类,如
Anything
,其中类属性的值将由动态数据设置。我定义了一个名为
set\u other\u variables()
的函数来设置所有这些属性的值。然而,我不断得到关于未定义的
self
的错误

我应该在何处以及如何通过函数
set_other_values()
定义,以便它为所有类设置值,而不会出现关于
self
的任何错误

我试图在
Something
中定义它,然后从
Anything
调用它,比如:

class Something(Else):
   def __init__(self, **kwargs):
       super.__init__(**kwargs)
       self.apple = ''
       self.mango = ''

   def something_function(self):
       // Python Code

   
   def set_other_values(data):
      self.apple = "data"

class Anything(Something):
   def construct(self):
       self.mango = "10 Mangoes"
       self.set_other_values(data)   
       self.something_function()

但是,我得到了关于
1位置参数的错误,但是为
set\u other\u values()
提供了2个
,您应该使用setattr,这样可以防止程序停止

def set_atrributes(self, **kwargs):
    for key in kwargs:
        if hasattr(self, key):
            setattr(self, key, kwargs[key])

请确保您的问题具有有效的Python语法。请注意,“根据我的理解,当任何东西被实例化时,它首先从某个东西调用init()”是错误的——就像任何其他方法一样,
\uuuuuu init\uuuuuuuu
必须显式地调用其父实现(例如,如果需要,通过
super()。\uuuuuu init\uuuuuuuu
)。语法高亮显示已经显示了一些(类的类型)。但是,制定答案通常需要根据问题代码显示有效的代码,因此运行它是一个给定的过程。如果没有有效的代码,就不可能首先说出错误的位置和原因。您可能已经因为不必调用父级
\uuuuuu init\uuuu
(并获取其参数)而产生错误,但这只是一个猜测。如图所示,其他\u值
不采用
self
参数。但是,应该这样做。您定义
设置其他值
,并尝试使用变量
self
,但在该范围内的任何地方都没有定义该变量
self
只是给函数的第一个参数的传统名称,该函数在类中用作方法。当在类的实例上调用该方法时,它将作为第一个参数隐式地传递给该实例。如果要使用类外的函数,必须手动调用该函数并显式地将其传递给实例。您可以将
myu实例.method()
视为
MyClass.method(myu实例)
,尽管它的工作原理与此不同。