gpt4 book ai didi

python - 了解 OOP 和静态方法

转载 作者:行者123 更新时间:2023-12-01 05:08:54 25 4
gpt4 key购买 nike

我以前从未用 OOP 编写过代码。我有一些函数来处理和验证增值税号码,我想将它们包含在一个类中(稍后,与其他用于处理 IBAN 帐号的类一起创建一个模块或一个包,我还不确定两者有什么区别)。

我获取了一个增值税号(西类牙语中的 CIF),首先,我需要清除其中除数字和字母以外的任何其他字符。然后验证该数字。

输入:

h55/586-75 4

期望的输出:

H55586754
True

实际输出:

h55/586-75 4
False

我的代码:

import re

class CheckingCIF:

_letras = "ABCDEFGHIJKLMNPQRSVW" # Not used yet.

def __init__(self, un_cif):
self.cif = un_cif
self._limpiarCIF()

def _limpiarCIF(self):
self.cif = re.sub('\W', "", self.cif.upper())
return self

def validarCodigoCIF(self):
if len(self.cif) != 9:
return False
numero = self.cif[1:10]
pares = int(numero[1]) + int(numero[3]) + int(numero[5])
impares = 0
for i in range(0, 8, 2):
j = int(numero[i]) * 2
if j < 10:
impares += j
else:
impares += j - 9
digito = str(pares+impares)[-1]
if int(digito) == 0:
checkCIF = 0
else:
checkCIF = 10 - int(digito)
if str(checkCIF) == self.cif[-1]:
return True
else:
return False

if __name__ == "__main__":
entradaCodigoCIF = input('Enter the VAT number: ')
mi_cif = CheckingCIF(entradaCodigoCIF)
print(mi_cif.cif)
print(CheckingCIF.validarCodigoCIF(mi_cif))

问题不在于 validarCodigoCIF(self) 方法,因为我之前测试过并且工作正常。

问题可能出在 _limpiarCIF(self) 方法中,因为我不理解面向对象编程以及 self 一词和静态方法的使用。

最佳答案

您没有静态方法,您有常规方法,但没有在实例上调用它们:

entradaCodigoCIF = input('Enter the VAT number: ')
mi_cif = CheckingCIF(entradaCodigoCIF)
print(mi_cif.cif)
print(mi_cif.validarCodigoCIF())

引用实例上的方法会为您提供一个绑定(bind)方法,这是一个知道如何调用底层函数并将实例作为第一个参数传递的对象。

关于python - 了解 OOP 和静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24571688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com