Наследование и видимость атрибутов в Python против Java - PullRequest
0 голосов
/ 08 ноября 2018

У меня проблемы с пониманием наследования на практике в Python, у меня есть базовый класс и класс Child, унаследованный от базового класса, и я могу сослаться на элемент дочернего класса из базового класса, и не возникает ошибка , Я вижу, что ссылочный тип, передаваемый в базовый класс, относится к типу наследуемого класса, что, вероятно, объясняет, почему нет неопределенности в разрешении переменной 'val', но действительно ли это так, как наследование работает во всех других языках?

>>> class A(object):
...     def test_method(self):
...             print(type(self))
...             print(self.val)
... 
>>> class B(A):
...     def __init__(self):
...             self.val = 100
... 
>>> b = B()

>>> dir(b)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', 
'__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', 
'__str__', '__subclasshook__', '__weakref__', 'test_method', 'val']

>>> b.test_method()
<class '__main__.B'> 
100

Пробовал то же самое в Java, и компиляторы Java пытаются найти переменную, определенную в унаследованном классе

class Parent {
    int x;

    public Parent(){
         x = 100;
    }
    public void display(){
        this.var = 1000;
        System.out.println(this.var);
        System.out.println(this.x);
    }
}

public class AccessCheck extends Parent {

    int var;

    public AccessCheck() {
       var = 2000;
    }
}

Следующий результат:

Error:(10, 13) java: cannot find symbol
symbol: variable var
Error:(11, 32) java: cannot find symbol
symbol: variable var

Я надеюсь, что разница в результатах отражает то, что я пытаюсь сказать точно.

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