Мне кажется, что нарезка - это не столько проблема, которая отличается от того, когда ваши собственные классы и программы плохо архивируются / разработаны.
Если я передаю объект подкласса в качестве параметра для метод, который принимает параметр суперкласса типа, я должен, конечно, знать об этом и знать внутренне, вызываемый метод будет работать только с объектом суперкласса (aka baseclass).
Мне кажется, необоснованное ожидание того, что предоставление подкласса, где запрашивается базовый класс, каким-то образом приведет к конкретным результатам подкласса, вызовет проблему разрезания. Его либо плохой дизайн при использовании метода, либо недостаточная реализация подкласса. Я предполагаю, что это обычно результат жертвовать хорошим дизайном ООП в пользу целесообразности или повышения производительности.
Вот, пожалуйста.
integer=int(input("Enter an integer:"))
print("*"*integer + " " + "*"*integer)
for i in range(integer-2):
print("*"*integer + " " + "*" + " "*(integer-2) + "*")
print("*"*integer + " " + "*"*integer)
Вывод:
Enter an integer: 5
***** *****
***** * *
***** * *
***** * *
***** *****
В качестве альтернативы, здесь гораздо проще понять:
integer=int(input("Enter an integer:"))
full = "*"*integer
cap = full + " " + full
hollow = "*" + " "*(integer-2) + "*"
print(cap)
for i in range(integer-2):
print(full + " " + hollow)
print(cap)
Производит идентичный вывод
Этот код работает, разделяя две уникальные строки:
integer=int(input("Enter an integer:"))
print("*"*integer + " " + "*"*integer)
for i in range(integer-2):
print("*"*integer + " " + "*" + " "*(integer-2) + "*")
print("*"*integer + " " + "*"*integer)