Когда вы создаете код на python и используете kv, сама библиотека будет искать файл .kv в том же каталоге, где находится файл .py, поэтому вам не нужно начинать с 'presentation = Builder.load_file (" simplekivy. kv ") '
это можно решить, изменив код питона на:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.graphics import Line
class MainScreen(Screen):
pass
class AnotherScreen(Screen):
pass
class ScreenManagement(ScreenManager):
pass
class TouchInput(Widget):
def on_touch_down(self, touch):
with self.canvas:
touch.ud["line"] = Line(points=(touch.x, touch.y))
def on_touch_move(self, touch):
touch.ud["line"].points += (touch.x, touch.y)
#don't need this
#presentation = Builder.load_file("simplekivy.kv")
class SimpleKivy(App):
pass
#I commented on that part of your code and added a 'pass' above
#def build(self):
# return presentation
if __name__ == "__main__":
SimpleKivy().run()
В Java, abstract
аннотация класса указывает, что класс нельзя непосредственно инстанцировать. Класс мог быть объявлен abstract
просто, потому что это никогда нельзя инстанцировать (возможно, это содержит только статические методы), или потому что его подклассы нужно инстанцировать вместо этого.
Это не требование это abstract
классы содержат abstract
методы (инверсия верна: класс, содержащий один или несколько abstract
методы должны быть abstract
.)
Вопрос того, необходимо ли копировать определение абстрактного метода, мог бы быть воспринят как вопрос о стиле - но мне будет трудно придумывать аргумент в пользу дублирования определения (единственный аргумент, который я могу придумать, находится в случае, где иерархия классов могла бы изменить семантику или использование метода, и таким образом требуется обеспечить дополнительный javadoc в классе B.)
Основной аргумент против переопределения abstract
метод - то, что дублирующий код плох - он делает рефакторинг более громоздкого, и такой (весь классик "не копируют код" аргументы, применяются.)
Они функционально равны, но первый предпочтен, потому что это короче и не странно.
Пойдите с № 1. Перезапись объявления метода в дочернем классе сбивает с толку. И Вам на самом деле не нужны никакие абстрактные методы в абстрактном классе, независимо от того, абстрактен ли родитель или нет.
Так, вопрос: Который предпочтен, когда sub классификация абстрактного класса в Java и не хотят обеспечивать реализацию?
a) отметьте подкласс как краткий обзор также
b) отметьте подкласс, столь же абстрактный также, И перепишите сигнатуру метода, отмеченную как краткий обзор?
Я пошел бы для первого:
a) Подкласс Mark как краткий обзор также.
У первого уже есть объявление абстрактного метода, нет никакого смысла в повторении его.
Вы правы, эти два случая эквивалентны. Случай 1) более прост, случай 2) является дублированием кода - избегают его. Но может быть одна причина сделать так:
Если метод в классе A не возвращается String
но позволяет, говорят, что C, класс B может переопределить его (начиная с Java 5) с более определенным типом возврата, позволяет, говорят, что D (класс расширяет C):
public abstract class A {
public abstract C giveSum();
}
public abstract class B extends A {
public abstract D giveSum();
}
public class C {
...
}
public class D extends C {
...
}