Python 有人能解释OOP的概念并纠正这段代码吗

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:

所以我正在用python编写这个非常简单的加密和解密程序。我以过程的方式理解它,但我想把它做成一个类。 这是密码

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
。。。