Python 将球体脚本包含到类中
我试图在类中包含此脚本。这是为了了解类如何工作,并使函数在其他地方可用 此脚本在3D matplotlib中生成球体。球体的方程是x^2+y^2+z^2=r^2。如果我们把系数加到任何一个变量上,它就会把球体拉长或缩短成一个椭圆。我希望能够调用这个类,改变r(半径)值,也许还有一些系数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
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。现在我没有看到任何课程,你的问题是什么?对不起。刚刚编辑。谢谢你的帮助。不熟悉使用类。你应该阅读类、初始化函数等。。。