дочерний класс с дополнительными аргументами python наследование класса - PullRequest
1 голос
/ 06 января 2020

Я написал родительский класс:

class Parent():
    def __init__(self, spark_session=None):
        try:
            # Instantiate Spark Session
            self.spark = spark_session
            if not self.spark:
                self.spark = SparkSession.builder.config("spark.sql.debug.maxToStringFields", 1000).appName("SparkTest") \
                    .getOrCreate()
        except Exception as e:
            print("Initialization of spark & logging couldn't be performed: {}".format(e))

Тогда дочерний класс имеет дополнительный аргумент в своем конструкторе, который является путем:

class Child(Parent):
    def __init__(self, path, spark=None):
        self.spark = super().__init__(spark)
        self.path = path

Затем, когда я пишу это:

a = Child("path", None)
print(a.spak)

Для:

self.spark = spark_session

Я получаю:

AttributeError: 'NoneType' object has no attribute 'spark' None

Любая идея, как это исправить и создать экземпляр объекта Spark, как и ожидалось.

Привет

1 Ответ

1 голос
/ 06 января 2020

self.spark = super().__init__(spark)

__init__ - это , а не конструктор. Он init анализирует атрибуты объекта и возвращает None, а не объект.

self.spark будет автоматически инициализирован при вызове super().__init__.

Примечание I также немного изменилось Parent.__init__. В вашем коде self.spark не определено в случае возникновения исключения, которое приведет к другим ошибкам в будущем.

class Parent:
    def __init__(self, spark_session=None):
        self.spark = spark_session            
        try:  
            if not self.spark:
                self.spark = SparkSession.builder .config("spark.sql.debug.maxToStringFields", 1000).appName("SparkTest") \
                .getOrCreate()
        except Exception as e:
            print("Initialization of spark & logging couldn't be performed: {}".format(e))


class Child(Parent):
    def __init__(self, path, spark=None):
        super().__init__(spark)
        self.path = path
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...