第一个Python对象

2024-06-01 13:23:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我以前用Java编写过面向对象的代码,但这是我第一次用Python编写。我在一所大学上了一门光学课,这门课似乎经常涉及线性回归拟合。所以我决定只创建一个简单的对象,我可以使用它来进行线性拟合,而不需要太多麻烦。也就是说,我对Python对象还不是很熟悉,到目前为止证明有点困难。你知道吗

在这一点上,一切似乎都很好地工作,除了一件我将谈到的事情,但我希望在我的Python对象冒险中得到一些反馈。一件看起来很困难的事情是给类变量赋值。另一个原因是我不太明白这些方法中的self参数是用来做什么的(在Java中它看起来几乎等同于this)。到目前为止,我的课程是:

__author__ = 'tristan'


import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit


class LinearFit:

__xdata = None
__ydata = None
__xerror = None
__yerror = None

def __init__(self, xdata, ydata, xerror = None, yerror = None):
    LinearFit.__xdata = xdata
    LinearFit.__ydata = ydata
    LinearFit.__xerror = xerror
    LinearFit.__yerror = yerror

def printxdata(self):
    print LinearFit.__xdata

下面是一个测试程序:

__author__ = 'tristan'

from LinearFit import LinearFit

x = [1,2,3,4,5]
y = [6, 7, 8, 9, 10]
z = LinearFit(x, y)
print z.printxdata()

我的输出是:

[1,2,3,4,5]
None

这是我现在的主要问题是为什么它没有打印出来(我之前提到的问题)? 谢谢你的帮助。你知道吗


Tags: 对象importselfnoneas线性java事情
2条回答

您的方法没有显式返回任何内容,因此它返回None。然后打印出来。如果要返回值,则应使用return LinearFit.__xdata[:]。而且你应该重新考虑一下你对首字母双下划线的使用。你知道吗

“退货”和“打印”是两码事。这就像要求别人给你一些东西或者给你看一些东西。你知道吗

# first executes printxdata()
# then returns the result
print z.printxdata()

# a longer and easier to understand way:
result = z.printxdata()
print result

结果将为None,因为printxdata()不返回任何内容,它只在屏幕上打印。你知道吗

// in Java
public void printxdata() {
    // it just PRINTS
    System.out.println(LinearFit.__xdata)
    // NO return statement
}

对不起,我只是想说清楚。你知道吗

编辑: 因为printxdata()已经打印了一些内容,所以不需要再次使用print:

# replace this
print z.printxdata()

# with this
z.printxdata()

相关问题 更多 >