考虑以下代码:
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文档),但我只是不明白为什么需要它,因为我显然可以创建一个没有它的程序。
答案 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的具体用途:它指的是对象的特定实例。
无论如何,如果你没有看到它的意思,只要取消课程并只使用功能,那就没有错。