-2

我仍然在研究 Python 中的类,

class Triangle(object):
    def __init__(self, angle1, angle2, angle3):
        angle1 = self.angle1
        angle2 = self.angle2
        angle3 = self.angle3
    number_of_sides = 3
    def check_angles(angle1, angle2, angle3):
        if angle1+angle2+angle3 == 180:
            return True
        else:
            return False

my_triangle = Triangle(30, 60, 90)
print(Triangle.number_of_sides)
print(Triangle.check_angles)

那么有什么问题呢?

Stackoverflow 有一些非常卑鄙的用户,我来自 MathStackExchange,人们并没有像这里那样对新手/菜鸟问题投反对票。

4

4 回答 4

5

你有你的任务向后:

self.angle1 = angle1

等等

考虑一下正在发生的事情可能会有所帮助。 self是传入的类的一个实例Triangle。所以,

T = Triangle()
T.method_call()  #basically the same as `Triangle.method_call(T)`

method_callself是对 的引用T。(__init__有点神奇——它会在第一行自动调用,但原理还是一样的)。一旦你知道了,就很容易明白你为什么需要self.whatever = whatever——你在对象上添加了一个新属性T
最后,这解释了您应该如何编写check_angles

def check_angles(self):
    #remember, `self` is a reference to a triangle instance -- T in our hypothetical code
    #so we can use `self` to gain access to all the attributes we set in `__init__`.
    if self.angle1 + self.angle2 + self.angle3 == 180:
        return True
    else:
        return False

现在快速转移到类属性。您也可以将属性放入中:

class Triangle:
    number_of_sides = 3

我认为在定义方法(函数)之前定义类属性是习惯性的,但实际上不必这样做。(它会帮助你的代码的读者理解它——由于你做事的顺序,我误解了你的原始代码)。

您也可以在创建类之后动态地向类添加属性:

class Triangle:
    ...

Triangle.number_of_angles = Rhombus.number_of_angles - 1

您可以通过Triangle.some_attribute几种方式访问​​。第一种方法是直接通过类 ( Triangle.number_of_sides)。第二种方式是通过实例:

T = Triangle()
T.number_of_sides

乍一看,这似乎有点好笑。毕竟,实例没有number_of_sides属性。事实证明,python 旨在首先查看实例查看它是否具有自己的number_of_sides属性。如果确实如此,那太好了,这就是你得到的。但是,如果没有,python 将查看该属性的类。这变成了在类实例之间共享数据的便捷方式。

于 2013-01-24T16:57:21.147 回答
1

我认为您的意思是这样编写构造函数:

class Triangle(object):
    def __init__(self, angle1, angle2, angle3):
        self.angle1 = angle1
        self.angle2 = angle2
        self.angle3 = angle3
于 2013-01-24T16:58:22.950 回答
1

我猜这是 Python Koans 练习。很棒的图书馆,祝你好运!

我相信你有两个问题。

首先是作业。自我在左侧。

其次是您的方法创建。您需要传递 self 变量并像这样引用属性

class Triangle(object):
    def __init__(self, angle1, angle2, angle3):
        self.angle1 = angle1
        self.angle2 = angle2
        self.angle3 = angle3
        self.number_of_sides = 3
    def check_angles(self):
        if self.angle1 + self.angle2 + self.angle3 == 180:
            return True
        else:
            return False
于 2013-01-24T17:07:06.747 回答
1

没有太多解释,所以您可以自己从中学习,这是一种编写类并使用它的方法:

class Triangle(object):
    def __init__(self, angle1, angle2, angle3):
        self.angle1 = angle1
        self.angle2 = angle2
        self.angle3 = angle3
    number_of_sides = 3
    def check_angles(self):
        return self.angle1+self.angle2+self.angle3 == 180

my_triangle = Triangle(30, 60, 90)
print(Triangle.number_of_sides)
print(my_triangle.check_angles())

输出:

3
True
于 2013-01-24T17:47:52.537 回答