Python 将球体脚本包含到类中

Python 将球体脚本包含到类中,python,class,matplotlib,3d,Python,Class,Matplotlib,3d,我试图在类中包含此脚本。这是为了了解类如何工作,并使函数在其他地方可用 此脚本在3D matplotlib中生成球体。球体的方程是x^2+y^2+z^2=r^2。如果我们把系数加到任何一个变量上,它就会把球体拉长或缩短成一个椭圆。我希望能够调用这个类,改变r(半径)值,也许还有一些系数 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figu

我试图在类中包含此脚本。这是为了了解类如何工作,并使函数在其他地方可用

此脚本在3D matplotlib中生成球体。球体的方程是x^2+y^2+z^2=r^2。如果我们把系数加到任何一个变量上,它就会把球体拉长或缩短成一个椭圆。我希望能够调用这个类,改变r(半径)值,也许还有一些系数

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# CREATE EMPTY LISTS
xs = []
ys = []
zs = []

# FOR EACH Z PLANE "z=dd", 
# CREATE CIRCLE WITH RADIUS ppp "ppp=100-dd^2"
def generateZ(dd):
    ppp = 100 - dd**2
    for xxx in range(-10,10):
        zs.append(dd)
        xs.append(xxx)
        yyy = np.sqrt(ppp - xxx**2)
        ys.append(yyy)
    for xxx in range(-10,10):
        zs.append(dd)
        xs.append(xxx)
        yyy = -np.sqrt(ppp - xxx**2)
        ys.append(yyy)

# GENERATE X AND Y'S FOR EACH Z
for dd in range(-10,10):
    generateZ(dd)

# SCATTER X,Y, AND Z COORDINATES
ax.scatter(xs, ys, zs)

# LABEL AXES
ax.set_xlabel("x axis")
ax.set_ylabel("y axis")
ax.set_zlabel("z axis")

# SET DIMENSIONS OF GRAPH
ax.set_ylim([-12,12])
ax.set_xlim([12,-12])
ax.set_zlim([-12,12])
# SHOW GRAPH
plt.show()
我试着简单地添加类容器并调用它。结果是自我没有被定义

这里是尝试

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

class Sphere(object):

    def __init__(self):
        self.xs = []
        self.ys = []
        self.zs = []

    # CREATE EMPTY LISTS


    # FOR EACH Z PLANE "z=dd", 
    # CREATE CIRCLE WITH RADIUS ppp "ppp=100-dd^2"
    def generateZ(self, dd):
        self.ppp = 100 - dd**2
        for xxx in range(-10,10):
            self.zs.append(dd)
            self.xs.append(xxx)
            self.yyy = np.sqrt(ppp - xxx**2)
            self.ys.append(yyy)
        for xxx in range(-10,10):
            self.zs.append(dd)
            self.xs.append(xxx)
            self.yyy = -np.sqrt(ppp - xxx**2)
            self.ys.append(yyy)

    # GENERATE X AND Y'S FOR EACH Z
    for dd in range(-10,10):
        self.generateZ(dd)

    # SCATTER X,Y, AND Z COORDINATES
    self.ax.scatter(xs, ys, zs)

    # LABEL AXES
    self.ax.set_xlabel("x axis")
    self.ax.set_ylabel("y axis")
    self.ax.set_zlabel("z axis")

    # SET DIMENSIONS OF GRAPH
    self.ax.set_ylim([-12,12])
    self.ax.set_xlim([12,-12])
    self.ax.set_zlim([-12,12])

    # SHOW GRAPH
    self.plt.show()

john = Sphere.generateZ(10)

在使用类或函数时,保持缩进的一致性至关重要。在示例代码中,缩进是错误的

如果我们纠正了这一点,剩下的问题是类没有初始化。解释我们不需要matplotlib或任何复杂的代码。 考虑下面的类。

class Foo(object):
    def __init__(self, arg):
        self.arg = arg

    @staticmethod    
    def mystaticmethod(arg):
        print(arg)

    def mymethod(self, arg):
        print(arg)
        print(self.arg)
它有一个
\uuuu init\uuu
方法和另外两个方法。一种是静态方法,另一种是常规方法。因为静态方法不依赖于被实例化的类,所以您可以像这样调用它

Foo.mystaticmethod(3)
但是,如果对
mymethod
尝试相同的方法

Foo.mymethod(3)
它将失败,因为类尚未初始化,即没有
Foo
的实例是
self
。要使用此方法,首先需要类的实例

Foo(4).mymethod(3)

我将把这个概念交给你们来翻译。

Faaaantatic。现在我没有看到任何课程,你的问题是什么?对不起。刚刚编辑。谢谢你的帮助。不熟悉使用类。你应该阅读类、初始化函数等。。。