Как запустить класс, если условие верно? - PullRequest
0 голосов
/ 08 мая 2020

Я хочу запустить весь класс, если условие верно. Я могу сделать это, поместив полный код в блок if.

is_active = True

class testClass():
    if is_active:
        print("Hello World")
        def func():
            print("this is a function")
        def func2():
            print("this is a another function")

Но я не хочу помещать полный код внутри блока if. Я хочу сделать что-то подобное, выходя по условию. Что мы делаем с помощью return в функциях.

class testClass():
    if is_active is False:
        #Exit the class(like return in a function)
    print("Hello World")
    def func():
        print("this is a function")
    def func2():
        print("this is a another function")

Мой код выглядит примерно так.

active = True    
class class1(parent_class):    
    if active is False:
        # Exit the class(like return in a function)
    print("Hello World")
    def func(self):
        print("this is a function")
    def func2(self):
        print("this is a another function")

class class2(class1):
    # Inherited class1. 
    # class1 will only work if active is True

obj = class2()

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 10 мая 2020

ну, если вы не хотите использовать, если не объявлять функции или удалять их, вы всегда можете добавить их!

Пример:

def function1():
    print("I'm function 1")
print("[LOG] Declared function1 {}".format(function1))


if input("Active? [y/n]").lower() == "y":
    active = True
else:
    active = False

class MyClass:
    def __init__(self):
        if active:
            self.function1 = function1
        print("[LOG] Class initalized")
    def function2(self):
        print("I'm function 2")

print("[LOG] Declared MyClass {}".format(MyClass))

obj = MyClass()
obj.function2()
obj.function1()

Вывод (если да) :

myuser@UbuntuVm:~/Desktop$ python test.py 
[LOG] Declared function1 <function function1 at 0x7f53cd4450d0>
Active? [y/n]y
[LOG] Declared MyClass <class '__main__.MyClass'>
[LOG] Class initalized
I'm function2
I'm function 1

Вывод (когда нет):

myuser@UbuntuVm:~/Desktop$ python test.py 
[LOG] Declared function1 <function function1 at 0x7f9c54c090d0>
Active? [y/n]n
[LOG] Declared MyClass <class '__main__.MyClass'>
[LOG] Class initalized
I'm function 2
Traceback (most recent call last):
  File "test.py", line 23, in <module>
    obj.function1()
AttributeError: 'MyClass' object has no attribute 'function1'

Думаю, это то, что вы имели в виду, вы даже можете изменить функции, когда active - False.

0 голосов
/ 08 мая 2020

Вместо того, чтобы не объявлять методы, вы можете их удалить!

active = False
class myclass:
    def myfunct1():
        print("I am function 1")
    def myfunct2():
        pass
    def myfunct3():
        print("I am function 3!")
    if not active:
        del(myfunct3)

myclass.myfunct1()
myclass.myfunct2()
myclass.myfunct3()

Если вы запустите это, вы получите:

I am function 1
Traceback (most recent call last):
  File "test.py", line 14, in <module>
    myclass.myfunct3()
AttributeError: type object 'myclass' has no attribute 'myfunct3'

Измените первую строку на: active = True

И вы получите:

I am function 1
I am function 3!

Надеюсь, я помог!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...