Эквивалент класса [_] в python - PullRequest
0 голосов
/ 27 мая 2020

Я хочу ввести следующий код scala на python3 язык

    class xyz{  
      def abc():Unit={  
        val clazz:Class[_] = this.getClass()
        var fields: List[String] = getFields(clazz);
        val method = clazz.getDeclaredMethods()
        val methodname=method.getName()
        val supper= clazz.getSuperclass()
        println(clazz)
        println(fields)
        println(method)
}}

Ответы [ 2 ]

3 голосов
/ 27 мая 2020

Эквивалент класса [_] в python

Class[_] является типом stati c. Python не имеет типов stati c, поэтому нет эквивалента stati c type Class[_] in Python.

Я хочу выполнить следующее scala код на python3 язык

class xyz{  
 def abc():Unit={  
   val clazz:Class[_] = this.getClass()
   var fields: List[String] = getFields(clazz);
   val method = clazz.getDeclaredMethods()
   val methodname=method.getName()
   val supper= clazz.getSuperclass();}
 def mno():Unit={
   println("hello")}}

abc - это просто NO-OP (*). mno просто печатает в stdout. Итак, эквивалент в Python:

class xyz:
  def abc(self):
    pass

  def mno(self):
    print("hello")

Обратите внимание, что я создал методы экземпляра abc и mno, хотя это не имеет смысла. (Но то же самое и для версии Scala.)


(*) Некоторые, кто знает больше об угловых случаях и побочных эффектах Java Reflection, могут исправить меня здесь. Может быть, это вызывает какую-то ссылку sh загрузчика классов или что-то в этом роде?

2 голосов
/ 27 мая 2020

Вы не можете получить однозначное соответствие просто потому, что Python классы организованы совершенно иначе, чем классы JVM.

  1. Эквивалент getClass() равен type;

  2. нет эквивалента Class#getFields, потому что поля не обязательно определены в классе в Python, но см. Как перечислить все поля класса (и нет методов)? .

  3. Аналогично getSuperclass(); Python классы могут иметь более одного суперкласса, поэтому __bases__ возвращает кортеж базовых классов вместо одного.

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