ДА это возможно
class base {
base show(){
System.out.println("base class");
return new base();
}
}
class sub extends base{
sub show(){
System.out.println("sub class");
return new sub();
}
}
class inheritance{
public static void main(String []args) {
sub obj=new sub();
obj.show();
}
}
Некоторые вещи, которые Вы сделали бы с LINQ, могут быть сделаны с пониманиями списка:
[myFunc(i) for i in numbers if i > 3]
Или можно использовать карту, уменьшить, и фильтр:
map(myFunc, filter(lambda x: x > 3, numbers))
, Но понимания списка намного больше "Pythonic", чем использование конструкций функционального программирования. Для сокращения вещей рассмотрите использование "" .join или сумма . И можно проверить, что значение истинности всего iterables при помощи [1 110] любой и весь
Просто помнит эти переводы:
Select -> map
Where -> filter
Aggregate -> reduce
И Вы хорошо будете на пути!
Я описал класс-оболочку C# вокруг методов расширения LINQ, чтобы получить синтаксис, аналогичный синтаксису «цепочечного метода расширения» C# в IronPython.
Идея состоит в том, чтобы иметь своего рода класс декоратора вокруг IEnumerable
, который просто вызывает методы расширения. Вероятно, этот класс-оболочку может быть написан так же хорошо на IronPython, но я пока не так хорошо разбираюсь в python :-)
public class ToLinq<T> : IEnumerable<T>
{
private readonly IEnumerable<T> _wrapped;
public ToLinq(IEnumerable<T> wrapped)
{
_wrapped = wrapped;
}
public ToLinq<T> Where(Func<T, bool> predicate)
{
return new ToLinq<T>(_wrapped.Where(predicate));
}
// ... similar methods for other operators like Select, Count, Any, ...
}
Это позволяет использовать синтаксис, подобный этому:
johns = ToLinq[Customer](customers)\
.Where(lambda c: c.Name.StartsWith("John"))\
.Select(lambda c: c.Name)
Отказ от ответственности: это то, что я пробовал в качестве учебное упражнение, я не использовал это в реальном проекте.