涉及子类和超类的代码中的错误

时间:2012-11-21 14:56:41

标签: subclass superclass

我必须为两个行星物体之间的力(牛顿重力定律)写一个类,然后创建一个子类,用于两个带电粒子之间的库仑吸引定律。对于那些不做物理学的人来说,这些是类似的功能(方法)。这是我的代码:

class Gravity:
     def __init__(self, m, M):
          self.m=m
          self.M=M
          self.G=6.67428E-11
     def force(self, r):
          G, m, M = self.G, self.m, self.M
          return (G*m*M)/(r**2)
     def visualize(self, r_start, r_stop, n = 100):
          import matplotlib.pyplot as plt
          from numpy import linspace
          r = linspace(r_start, r_stop, n)
          g = self.force(r)
          plt.plot(r,g)
          set_title='Gravity force: m=%g, M=%g' % (self.m, self.M)
          plt.show ()

和我的子类

class Coulomb(Gravity):
     def __init__(self, q1, q2):
          Gravity.__init__(self, q1, q2)
          self.G= 8.99E+9
     def force(self, r):
          Gravity.force(self, r)
     def visualize(self, r_start, r_stop, n = 100):
          Gravity.visualize(self, r_start, r_stop, n = 100)

然后我尝试使用visualize方法用以下代码来绘制这个库仑法

l = Coulomb(2.63E-9, 8.69E-9)   #My two charges q1 and q2
w = l.visualize(0.1, 1)         #My start and end points for the linspace

我是一名物理系的学生,而不是程序员,所以我想这看起来完全一塌糊涂,但是我知道超类可以自己创建一个反方形图但是当我用同一组代码运行它时.py文件(按上面显示的顺序)我收到错误消息“x和y必须具有相同的第一维”,我认为这意味着我的两个绘图参数的大小不同,但我无法弄清楚为什么他们不是。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

没有得到任何回复,但无论如何,谢谢。我设法写了一些有用的东西。我会在这里发布我的代码,用于任何其他被迫做编程并且陷入类似问题的物理学生。我想我的解决方案相当丑陋,但它确实让我在那里。如果有人想编辑它或任何东西以使其更好,那么请随意。

class Gravity:
      """Gravity force between two physical objects."""
      def __init__(self, m, M):
            self.m=m
            self.M=M
            self.G=6.67428E-11
      def force(self, r):
            G, m, M = self.G, self.m, self.M
            return (G*m*M)/(r**2)
      def visualize(self, r_start, r_stop, n = 100):
            import matplotlib.pyplot as plt
            from numpy import linspace
            r = linspace(r_start, r_stop, n)
            g = self.force(r)
            plt.plot(r,g)
            set_title='Gravity force: m=%g, M=%g' % (self.m, self.M)
            plt.show ()

和子类

class Coulomb(Gravity):
    def __init__(self, q1, q2):
        Gravity.__init__(self, q1, q2)
        self.G= 8.99E+9
    def force(self, r):
        G, m, M = self.G, self.m, self.M
        return (G*m*M)/(r**2)
    def visualize(self, r_start, r_stop, n = 100):
        Gravity.visualize(self, r_start, r_stop, n = 100)

然后我用

调用了visualize方法
l = Coulomb(2.63E-9, 8.69E-9)    #two arbitrary charges
w = l.visualize(0.1, 1)          #start and end points for linspace for r

这导致了一个很好的逆平方型图。希望这有助于某人。