Как исправить проблемы с использованием классов в переменных - PullRequest
0 голосов
/ 15 апреля 2019

Формат, который я использую для выполнения некоторого кода, основанного на том, к какому классу относится переменная 'tester', кажется, не работает. Как я могу написать код так, чтобы переменная 'var' в классе 'testClass ()' была изменена.

Я попытался изменить формат с "if tester == testClass ():" на "if testClass () в [tester]:", но не работает и не возвращает ошибок. Изменение 'var = second' на 'var = "second"', похоже, тоже не помогает, равно как и удаление скобок.

Код выглядит следующим образом:

class fillClass():
    fill = True

class testClass():
    var = "first"
    filler = True

tester = testClass()
oldVar = tester.var
print(oldVar,"is older variable")
second = "second"

if tester == testClass():
    class testClass():
        var = second
        filler = True

tester = testClass()
newVar = tester.var
print(newVar,"is newer variable")

Я бы ожидал выход

first is older variable
second is newer variable
>>> 

но фактический результат равен

first is older variable
first is newer variable
>>> 

Как я могу исправить эту проблему?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Проблема заключается в следующем условии if: if tester == testClass(), которое всегда будет иметь значение false, поскольку при вызове testClass() создается совершенно новый объект типа testClass. Вы хотите проверить, какой экземпляр переменной, используя функцию isinstance().

Это то, что вы хотите:

class fillClass():
    fill = True

class testClass():
    var = "first"
    filler = True

tester = testClass()
oldVar = tester.var
print(oldVar,"is older variable")
second = "second"

if isinstance(tester,testClass):
    class testClass():
        var = second
        filler = True

tester = testClass()
newVar = tester.var
print(newVar,"is newer variable")
0 голосов
/ 15 апреля 2019

Вы сравниваете экземпляр класса с классом, который не будет работать.Я не знаю, если это то, что вы хотите проверить, но если да, вы должны сделать так:

Вместо:

if tester == testClass():

Вы должны использовать:

if isistance(tester, testClass()):

Кроме того, в вашем коде вы никогда не использовали fillClass.

Я предполагаю, что вы хотите что-то вроде этого:

class TestClass():
    var = "first"
    filler = True


tester = TestClass()
oldVar = tester.var
print(oldVar, "is older variable")
second = "second"

if tester.var == "first":
    tester.var = second

newVar = tester.var
print(newVar, "is newer variable")

Обратите внимание, что вы должны уважатьСоглашение об именах классов Python (использование заглавных букв в заглавных буквах), и вам не нужно заново определять свой класс.

Вам также следует знать разницу между переменными экземпляра и переменными класса, и вы можете использовать конструктор класса de:

class TestClass():
    def __init__(self, var, filler=True):
        self.var = var
        self.filler = filler
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...