Есть ли какой-либо способ доступа к переменным родительского класса в python, как и в java?

#java #python

Вопрос:

Поскольку я изучаю как Java, так и Python, мне стало любопытно, может ли он получить доступ к родительским переменным с помощью super ключевого слова, как на языке Java.

На Яве это было бы похоже

 public class Parent {
   int var = 222;
}

public class Child extends Parent {
   int var = super.var
}
 

но в Python это вызовет ошибку

 class Parent:
    var = 222

class Child(Parent):
    var = super.var
 

Я знаю , что его можно использовать как Parent.var вместо super.var , но это кажется нехорошим, потому что он не показывает, что это переменная его родителя.
Есть ли какой-либо способ использовать родительскую переменную в дочернем классе, как в Java?, если нет, то аналогичный?

Комментарии:

1. Вы можете использовать наследование, чтобы увидеть это youtu.be/an59YHkdK9A и это youtu.be/J2_DHndMW9s

2. зачем вам это делать int var = super.var — просто используйте var его по наследству.

Ответ №1:

Вы можете получить к нему доступ по self ссылке, потому Child что унаследовано var .

Попробуйте это:

 class Parent:
    var = 222

class Child(Parent):
    def __init__(self):
        print(self.var)

child = Child()
print(child.var)
 

Комментарии:

1. Разве » var » не должно быть полем экземпляра в родительском классе? (у вас это как статическое поле)

Ответ №2:

Исходный код Java содержит ‘var’ в качестве поля экземпляра в базовом классе. Эквивалентным Python был бы:

 class Parent(object):

    def __init__(self):
        self.var = 222

class Child(Parent):

    def inst_method(self):
        var = self.var  # temp copy of self.var
 

Обратите внимание, что » var «не имеет смысла быть полем экземпляра в классе «Дочерний», как в вашем исходном коде Java (вероятно, в любом случае это запрещено в Java), но, возможно, в качестве локальной переменной в качестве временной копии поля базового класса.

Ответ №3:

 class Parent:
    var = 222

class Child(Parent):
    print("from inside class ", Parent.var)


print("from class obj ", Child().var)