使用相同方法在类内创建Python类

使用相同方法在类内创建Python类,python,class,methods,Python,Class,Methods,如果我在一个类中编写一个类,并且它们都使用相同的方法,即: class Master: def calculate(self): variable = 5 return variable class Child: def calculate(self): variable = 5 return variable 我是否必须在两个类中声明此方法,或者只能在主类中声明它,然后在子类中使用它?将一个类嵌套在另一个类中除了使嵌套的类成为外

如果我在一个类中编写一个类,并且它们都使用相同的方法,即:

class Master:  
  def calculate(self):  
    variable = 5
    return variable
  class Child:
    def calculate(self):
      variable = 5
      return variable

我是否必须在两个类中声明此方法,或者只能在主类中声明它,然后在子类中使用它?

将一个类嵌套在另一个类中除了使嵌套的类成为外部类上的属性之外,没有其他效果。他们没有其他关系

换句话说,
Child
是一个可以称为
Master.Child
的类,而不仅仅是普通的
Child
Master
的实例可以寻址
self.Child
,这是对同一类的引用。这就是关系结束的地方

如果要在两个类之间共享方法,请使用继承:

class SharedMethods:
    def calculate(self):  
        variable = 5
        return variable

class Master(SharedMethods):
    pass

class Child(SharedMethods):
    pass
这里的
Master
Child
现在都有一个
calculate
方法

由于Python支持多重继承,因此创建这样的mixin类来共享方法相对来说比较轻松,并且不排除使用其他类来表示is-a关系


将包容关系留给实例;为
Master
指定一个
child
属性,并将其设置为
child
实例。

将一个类嵌套在另一个类中除了使嵌套类成为外部类上的一个属性外,没有其他效果。他们没有其他关系

换句话说,
Child
是一个可以称为
Master.Child
的类,而不仅仅是普通的
Child
Master
的实例可以寻址
self.Child
,这是对同一类的引用。这就是关系结束的地方

如果要在两个类之间共享方法,请使用继承:

class SharedMethods:
    def calculate(self):  
        variable = 5
        return variable

class Master(SharedMethods):
    pass

class Child(SharedMethods):
    pass
这里的
Master
Child
现在都有一个
calculate
方法

由于Python支持多重继承,因此创建这样的mixin类来共享方法相对来说比较轻松,并且不排除使用其他类来表示is-a关系


将包容关系留给实例;为您的
Master
指定
child
属性,并将其设置为
child
实例。

为什么要嵌套类?这些类之间没有关系,只有
子类
成为
主类
上的属性;方法不共享。@MartijnPieter这些类具有完全不同的字段,但使用一个或两个相同的方法。也许这不是一个很好的代码,但答案会被广泛接受。那么为什么不使用继承呢?将要共享的方法放在基类上。我真的希望子类成为Master字段。有更好的方法吗?如果我在django中使用它,我想稍后使用此关系来查看html中主字段内的子实例。您可以始终为
Master
指定
Child
属性,并为其分配
Child
实例。然后每个
主实例
都有一个
子实例。为什么要嵌套类?这些类之间没有关系,只有
子类
成为
主类
上的属性;方法不共享。@MartijnPieter这些类具有完全不同的字段,但使用一个或两个相同的方法。也许这不是一个很好的代码,但答案会被广泛接受。那么为什么不使用继承呢?将要共享的方法放在基类上。我真的希望子类成为Master字段。有更好的方法吗?如果我在django中使用它,我想稍后使用此关系来查看html中主字段内的子实例。您可以始终为
Master
指定
Child
属性,并为其分配
Child
实例。然后每个
Master
实例都有一个
Child
实例。谢谢。如果我的代码文件将包含大约20个类,其中一些类将具有与另一个类相同的方法。它会不会让代码变得不可读,因为对于不同的类,大约有5类共享方法?(不是我的情况,但很有趣…@Alexander:如果您有那么多不同的类和一些共享方法,您可能需要重新考虑您的体系结构。:-)非常感谢。如果我的代码文件将包含大约20个类,其中一些类将具有与另一个类相同的方法。它会不会让代码变得不可读,因为对于不同的类,大约有5类共享方法?(不是我的情况,但很有趣…@Alexander:如果您有那么多不同的类和一些共享方法,您可能需要重新考虑您的体系结构。:-)