Python устанавливает переменную в классе один раз - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь написать метод в классе Fraction для умножения всех знаменателей каждой дроби вместе. Я пытаюсь сделать это, умножая каждое число на переменную с именем CD, и я хочу, чтобы CD изначально был 1. Как я могу установить это в 1, но только в первый раз? Я попытался определить в нескольких частях класса, но ничего не помогло.

class Fraction(object):

    #define CD = 1 somewhere    

    def __init__(self, numerator, denominator):
        self.numerator = numerator
        self.denominator = denominator

    def findCD(self):
        CD *= self.denominator
        return CD

fractions = [Fraction(1,2), Fraction(1,4), Fraction(9,20), 
Fraction(5,6), Fraction(3,8), Fraction(2,9)]

for i in range(0, len(fractions)):
     fractions[i].findCD()

Обычно я сталкиваюсь с проблемой, когда CD всегда имеет значение 1, возвращая точные значения соответствующего знаменателя. Необходимо, чтобы CD был в этом классе, потому что он используется повсюду.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вместо передачи числителя и знаменателя в init вы можете передать его в findCD. определите self.CD внутри init и переопределите его в findCD, чтобы self.CD инициализировался в 1 только при создании класса.

class Fraction(object):
    def __init__(self):
        self.CD = 1

    def findCD(self, numerator, denominator):
        self.CD = self.CD * denominator
        return(self.CD)

fractions = [(1,2), (1,4), (9,20), (5,6), (3,8), (2,9)]
fraction = Fraction()
for i in fractions:
    print(fraction.findCD(i[0], i[1]))

выход

2
8
160
960
7680
69120

Ответ зависит от того, чего вы пытаетесь достичь. Если вы хотите узнать конкретно о том, «как установить переменную только один раз?» Вы можете перейти по этой ссылке

Надеюсь, это поможет!

0 голосов
/ 29 июня 2018

Сделайте это на уровне класса, используя self: инициализируйте CD в __init__, а затем верните self.CD вместо CD:

class Fraction(object):
    def __init__(self, numerator, denominator):
        self.CD = 1 # do it here, add one more parameter, if needed
        self.numerator = numerator
        self.denominator = denominator

    def findCD(self):
        self.CD *= self.denominator
        return self.CD

fractions = [Fraction(1,2), Fraction(1,4), Fraction(9,20),
             Fraction(5,6), Fraction(3,8), Fraction(2,9)]

result = [f.findCD() for f in fractions]
print(result)

# Or, to output updated CD
r = [f.CD for f in fractions]
print(r)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...