我正在尝试在类中包含此脚本。这是为了了解类如何工作以及使函数在其他地方可用。
此脚本在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)
答案 0 :(得分:1)
使用类或函数时,保持缩进一致至关重要。在示例代码中,缩进是错误的。
如果我们纠正这个问题,那么剩下的问题是该类未初始化。解释我们不需要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)
它有一个__init__
方法和另外两种方法。一种是静态方法,另一种是常规方法。由于静态方法不依赖于实例化的类,因此可以将其称为
Foo.mystaticmethod(3)
但是,如果您对mymethod
,
Foo.mymethod(3)
它将失败,因为该类尚未实例化,即没有Foo
的实例self
。要使用此方法,首先需要该类的实例。
Foo(4).mymethod(3)
我会留给你把这个概念翻译成你的班级。