저는 파이썬으로 첫 번째 프로그램을 만들고 있습니다. 목록에 개체를 추가하고 FOR 루프 내에 이러한 개체를 만듭니다. 문제는 목록을 채운 후 어떤 개체의 값을 확인하면 모두 마지막에 추가 된 개체처럼 보입니다.
class clsNumeros:
numero = 4
oper = [int() for i in range(5)]
def __init__(self, op1, op2, op3, op4):
self.oper[1] = op1
self.oper[2] = op2
self.oper[3] = op3
self.oper[4] = op4
def CountOperaciones():
return 5
def GetValorOper(self, idxOper):
num = self.oper[idxOper]
if num == 1:
return num
elif num == 2:
return sqrt(num)
elif num == 3:
return Factorial(num)
elif num == 4:
return 4/10
elif num == 5:
return sqrt(0.4)
def GetExprOper(self, idxOper):
num = self.oper[idxOper]
if num == 1:
return num
elif num == 2:
return "R(" + num + ")"
elif num == 3:
return num + "!"
elif num == 4:
return "0.4"
elif num == 5:
return "R(0.4)"
def Display(self):
txt = ""
for x in range(1, 5):
txt = txt + str(self.oper[x])
txt = txt + " ___ "
print (txt)
def GeneraNumeros():
c = []
idx = [int() for i in range(5)]
i = 0
idx[1] = 1
idx[2] = 1
idx[3] = 1
idx[4] = 1
looping = 1
n = 0
while looping == 1:
num = clsNumeros(idx[1], idx[2], idx[3], idx[4])
c.append(num)
n = n + 1
idx[4] = idx[4] + 1
for i in range (4, 1, -1):
if idx[i] > clsNumeros.CountOperaciones():
idx[i] = 1
idx[i-1] = idx[i-1] + 1
if idx[1] > clsNumeros.CountOperaciones():
looping = 0
c[5].Display() # this is for displaying object number 5. All of them look like the last one
return numeros
무엇이 잘못 되었을까요? FOR 루프 내에 개체를 만들고 고유 할 것으로 기대할 수 있습니까? 이 아이디어는 ASP.NET에서 잘 작동합니다.
감사!
문제는 여기에 있습니다.
class clsNumeros:
oper = [int() for i in range(5)]
클래스 변수는 클래스 정의 시점에 한 번 평가됩니다. 따라서 여기에는 하나의 list 인스턴스 만 생성됩니다. oper
대신 생성자에서 초기화 하여 수정 하십시오.
다른 문제:
0
대신 말할 수 있습니다int()
[0]*5
대신 말할 수 있습니다[0 for i in range(5)]
method_name
and를 사용 ClassName
합니다.class clsNumeros(object)
다른 (이전) 구문이 파이썬에서 약간 다르게 동작하는 "이전 스타일"클래스를 생성하기 때문에 작성하는 습관을 가지십시오.Display
을 사용하여 str.join
방법을 단순화 할 수 있습니다.'__'.join(items)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다