python类中的自我 - 我可以用它来做...?

时间:2016-08-11 17:54:16

标签: python class self

考虑以下代码:

class example(object):

    def __init__ (): # No self
        test()       # No self

    def test(x,y):   # No self
        return x+y 

    def test1(x,y):  # No self
        return x-y

print(example.test(10,5))
print(example.test1(10,5))

15
5

这可以按预期工作。我相信我可以编写一个不使用 self 的整个程序。我错过了什么?这是什么自我;为什么需要以某种实际的方式?

我已经阅读了很多关于它的内容 - (堆栈,Python文档),但我只是不明白为什么需要它,因为我显然可以创建一个没有它的程序。

3 个答案:

答案 0 :(得分:1)

您尚未正确使用 对象。删除垃圾代码,您的程序将减少到:

def test(x,y): #No class
    return x+y 

def test1(x,y): #No class
    return x-y

print(example.test(10,5))
print(example.test1(10,5))

Output:

15
5

您的“类”并不比将程序包装在嵌套结构中更有用:

if True:
    for i in range(1):
        ...

正确的对象将具有对该数据进行操作的属性(数据字段)和函数(见下文)。你的代码有一个空对象;因此,你没有任何操作,不需要自我,根本不需要课程。

而是在需要封装数据表示和关联操作时使用类。下面,我重复使用了一些代码来使示例做一些简单的复杂数字工作。在这方面有许多扩展和改进;我把它保持在原来的工作中。

class example(object):

    def __init__(self, a, b):
        self.a = a
        self.b = b

    def __repr__(self):
        sign = ' + ' if self.b >= 0 else ' - '
        return str(self.a) + sign + str(abs(self.b)) + 'i'

    def add(self, x): 
        self.a += x.a
        self.b += x.b

    def sub(self, x): 
        self.a -= x.a
        self.b -= x.b

complex1 = example(10, 5)
complex2 = example(-3, 2)
complex1.add(complex2)
print(complex1)
complex2.sub(complex1)
print(complex2)

Output:

7 + 7i
-10 - 5i

答案 1 :(得分:-1)

您熟悉面向对象的范式吗? 如果你不这样做,你应该检查它。 Python是面向对象的语言,self允许您定义对象属性 一个例子:
你有一个名为Vehicle的类。车辆可以是自行车,汽车,甚至是飞机。所以你可以包括一个名字和类型。

class Vehicle():
  def init(self, name, type): # Constructor
    self.name = name
    self.type = type
  def info(self):
    print("I'm a ")
    print(self.name)

就是这样,现在你有一辆名字和类型的车辆。 Vehicle的每个实例都有一个名称和类型不同或不同,每个intance都可以访问自己的变量。对不起,我无法解释得更好。 Firstable你需要知道面向对象的范式知识。如果您有疑问,请评论我的答案。我会回答你或提供一个更好地解释的链接。

答案 2 :(得分:-1)

你可以完美地创建一个没有它的程序。但是,你错过了课程的一个关键特征。如果你能做到没有自我,我认为你可以不用课,只做一些纯粹的功能:)

类允许您创建具有与之关联的PROPERTY的对象,而self允许您访问这些值。所以说你有一个正方形。

g code:

class Square(object):

    def __init__ (self, length, height):
        self.length = length # THIS square's length, not others
        self.height = height # THIS square's height, not other

    def print_length_and_height(self):
        print(self.length, self.height) # THIS square's length and height



square1 = Square(2,2)
square2 = Square(4,4)
square1.print_length_and_height() # 2 2
square2.print_length_and_height() # 4 4

现在,这个例子非常愚蠢,当然,但我认为它显示了SELF的具体用途:它指的是对象的特定实例。

无论如何,如果你没有看到它的意思,只要取消课程并只使用功能,那就没有错。