OO Aproach python

时间:2014-02-04 08:10:02

标签: python oop

我想在python中学习更多有关OO的知识,但我不太明白为什么是我的错误:

这(功能方法按预期工作)

def code_func(text, a, b):
        l1 = a + b
        l2 = b + a
        tabela = dict((l1[x],l2[x]) for x in range(len(l1)))
        textb = ""
        for i in range(len(text)):
            textb +=  text[i] if str(text[i]) not in tabela else tabela[str(text[i])]
        return textb  

但是,以下方法不会: 注意 - >我知道有一种方法可以调用另一种方法,但我正在尝试这只是为了理解更好的OO概念。 它确实将文本拆分为行,结果与前者不同。

class Cipher:
    def __init__(self, l1, l2, text):
        self.l1 = l1
        self.l2 = l2
        self.text = text


    def code(self):

        l1 = self.l1 + self.l2
        l2 = self.l2 + self.l1
        tabela = dict((l1[x],l2[x]) for x in range(len(l1)))
        textb = ""
        for i in range(len(self.text)):
            textb +=  self.text[i] if str(self.text[i]) not in tabela else \
            tabela[str(self.text[i])]
        return textb   


    def encode(self):
        return self.code()

输入中的输出样本以显示正在发生的事情:

输入:code_func("criptografia","zenitpolar","polarzenit")

输出:"ctazregtifai"


OOP:

输入:

crypto = Chiper("criptografia", "zenitpolar", "polarzenit") 
crypto.encode()

输出:

"c  
aerng  
tfat"

1 个答案:

答案 0 :(得分:1)

在第一种方法中,您传递参数

code_func("criptografia","zenitpolar","polarzenit")

根据您的功能定义:

def code_func(text, a, b):

#text = "criptografia"
#a = "zenitpolar"
#b = "polarzenit"

而在第二种方法中,您将以相同的顺序传递参数:

crypto = Chiper("criptografia", "zenitpolar", "polarzenit") 

__init__函数以不同的顺序接受参数:

def __init__(self, l1, l2, text):

#l1 = "criptografia"
#l2 = "zenitpolar"
#text = "polarzenit"

这就是输出不同的原因。像这样调用你的函数:

crypto = Chiper("zenitpolar", "polarzenit", "criptografia")