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

Я новичок в Python, и у меня возникают некоторые проблемы, когда нужно передать init значение из одного класса в другой.

Я читал об использовании функции super (), которая может быть Очень простой способ передать значения из одного класса в другой, однако я не совсем осведомлен и не имею проблем с этим, и я не уверен, что это тоже то, что я ищу.

Пока я я написал что-то простое:

Class 1:


from classOne import printClass


class classOne:

    def __init__(self):
        self.test = "test"
        self.hello = "hello"
        self.world = "world"

    def main(self,):

        printClass.printFunction(#Send init values#)


test = classOne()
test.main()

# ------------------------------------------------------------------------------- #

Class 2:


class printClass():


    def printFunction(test, hello, world):
        print(test)
        print(hello)
        print(world)


printClass()

, и мне интересно, как я могу отправить из класса 1 значения init в класс 2, чтобы я мог распечатать эти init из класса 1 внутри класса 2

Ответы [ 2 ]

2 голосов
/ 08 марта 2020

На данный момент, поскольку метод printfunction не является статическим c, вам нужен экземпляр класса printclass, а затем передайте значения в качестве параметров

printClass().printFunction(self.test, self.hello, self.world)

У вас также есть статус c функция в printclass, если нет точного c параметра для экземпляра

class printClass:
    @statticmethod
    def printFunction(test, hello, world):
        print(test)
        print(hello)
        print(world)

Вызов будет

printClass.printFunction(self.test, self.hello, self.world)
0 голосов
/ 08 марта 2020

Python не имеет приватных учеников. Это означает, что любой член класса (или член любого экземпляра этого класса) может быть доступен напрямую и без ограничений извне. Таким образом, вы можете сделать что-то вроде этого:

class classOne:
    def __init__(self):
        self.test = "test"
        self.hello = "hello"
        self.world = "world"


class classTwo:
    def __init__(self, class_one):
        self.test = class_one.test
        self.hello = class_one.hello
        self.world = class_one.world
    def printFunction(self):
        print(self.test)
        print(self.hello)
        print(self.world)

Тогда вы можете сделать это:

>>> class_one = classOne()
>>> class_two = classTwo(class_one)
>>> class_two.printFunction()

Или, если вы хотите classTwo наследовать от classOne, вы можете сделать это :

Файл: module_one.py:

class ClassOne:
    def __init__(self):
        self.test = "test"
        self.hello = "hello"
        self.world = "world"

Файл: module_two.py:

import module_one

class ClassTwo(module_one.ClassOne):
    def printFunction(self):
        print(self.test)
        print(self.hello)
        print(self.world)

Это работает, поскольку classTwo наследует значения test hello и world из classOne. Его использование почти то же самое, но classTwo больше не принимает экземпляр classOne в своем конструкторе:

>>> import module_two
>>> c2 = module_two.ClassTwo()
>>> c2.printFunction()
...