Python 有人能解释OOP的概念并纠正这段代码吗
所以我正在用python编写这个非常简单的加密和解密程序。我以过程的方式理解它,但我想把它做成一个类。 这是密码Python 有人能解释OOP的概念并纠正这段代码吗,python,class,oop,encryption,self,Python,Class,Oop,Encryption,Self,所以我正在用python编写这个非常简单的加密和解密程序。我以过程的方式理解它,但我想把它做成一个类。 这是密码 class Encrypt(): def __init__(self,scentence): self.scentence = scentence def encryptor(self): result = [] for letter in self.scentence:
class Encrypt():
def __init__(self,scentence):
self.scentence = scentence
def encryptor(self):
result = []
for letter in self.scentence:
l = ord(letter)+20
result.append(l)
for numbers in result:
print(numbers,end = '')
print(" " , end = '')
print(result)
def decryptor(result):
print(result)
end_string = ""
for j in result:
l = int(j)
l = l-20
l = chr(l)
end_string = end_string + l
print("The decrypted message is below:")
print(end_string)
f = Encrypt("helloe")
f.encryptor()
f.decryptor()
因此,当我运行这段代码时,出现如下错误
对于结果中的j:
TypeError:“加密”对象不可编辑
在Python中解释某人的自我概念和对象和类< /P> < P>,这将是非常有帮助的,第一类参数的方法总是代码> > > >代码>(而在其他面向对象语言中,如C++和java,这个参数是隐式的)。有关原因的解释,请参阅。(
self
只是第一个参数的常规名称,但名称可以是任何名称,如self
,this
,banana
,或result
)
由于您的decryptor()
方法中没有self
参数,Python解释器将尝试将您提供的参数(result
)解释为self
参数,这意味着它希望它属于Encrypt
类型,而不是,因此出现错误
作为旁注,在面向对象程序中,类的名称应该是名词,方法的名称应该是动词——因此在程序中,您将有一个名为“Encryptor”的类和名为“encrypt”和“decrypt”的方法。在Python中,类方法的第一个参数始终是
self
(在其他C++语言和java语言中,这个参数是隐式的)。为了解释为什么,参见(<代码>自我<代码> >只是第一个参数的常规名称,但是名称可以是任何东西,比如“代码>自我< /代码>,<代码> < <代码> >代码>香蕉<代码>,或<代码>结果< /代码>
由于您的decryptor()
方法中没有self
参数,Python解释器将尝试将您提供的参数(result
)解释为self
参数,这意味着它希望它属于Encrypt
类型,而不是,因此出现错误
作为旁注,在面向对象的程序中,类的名称应该是名词,方法的名称应该是动词——因此,在您的程序中,您将有一个名为“Encryptor”的类和名为“encrypt”和“decrypt”的方法.始终发布完整的错误消息,包括堆栈跟踪。但问题在于您定义第二个方法的方式。所有方法都将实例作为第一个参数传递,按照惯例,名称将为
self
。因此,在您的情况下,result
将实例传递给您,然后您循环它,但它不可编辑,他说从加密机
函数返回错误和结果
本身。然后,f.encryptor(f.decryptor)
。始终发布完整的错误消息,包括堆栈跟踪。但您的问题在于定义第二个方法的方式。所有方法都将实例作为第一个参数传递,按照惯例,名称将为self
。因此,在您的情况下,result
将实例传递给您,然后您对其进行循环,但它不可执行,因此,应该从加密机
函数返回error和结果
本身。然后,f.encryptor(f.decryptor)
。您应该明确指出,self
只是第一个参数的常规名称,在调用实例上的方法时,它总是会传递给实例。它可以是任何形式,self
,this
,banana
,或者result
。您应该是真实的请明确指出,self
只是第一个参数的常规名称,在调用实例上的方法时总是会传递给实例。它可以是任何形式,self
,this
,banana
,或result
。。。