Реализация класса формы в Python с фактическим нарисованным квадратом?

У меня есть следующий код, который создает класс формы, и у меня есть два вопроса, на которые я был бы признателен за ответы: 1. При запуске следующего кода результат будет таким:

>>> 
100
100
None
>>> 

Что такое "Нет" в конце и как избавиться от этого вывода?

<сильный>2. В идеале я хотел бы иметь возможность РИСОВАТЬ (на экране вывода) квадрат. Я не хочу использовать pygame. Я задавался вопросом, можно ли интегрировать черепаху для этого, но не знаю, с чего начать? Любые предложения по методу, который сделает это с помощью черепахи, или любое другое гениальное предложение?

from turtle import*
class Shape:
    #self is how we refer to things in the clas from within itself. .self is the first parameter in any function defined inside a class
    #to access functions and variables inside the class, their name must be preceded with self and a full-stop (e.g. self.variable_name)
    def __init__(self,x,y):
        self.x=x #the shape has the attribute x (width)
        self.y=y #the shape has the attribute y (height)

    description="The shape has not yet been brought into being"
    author="No one has yet claimed authorship of this shape"

    def area(self):
        return self.x*self.y
    def perimeter(self):
        return 2*self.x+2*self.y
    def describe(self,text):
        self.description =text
    def authorName(self,text):
        self.author=text
    def scaleSize(self,scale):
        self.x=self.x*scale
        self.y=self.y*scale
    def print(self):
        print(self.x)
        print(self.y)


square=Shape(100,100)
print(square.print())

Я мог бы добавить, что на SO есть аналогичный вопрос, но нет конкретного или полезного ответа.

Использование класса для рисования фигур в черепахе

ОБНОВИТЬ:

Я пробовал что-то вроде этого, но не могу заставить его работать. Я думаю, что мне нужно инициализировать черепаху где-то в конструкторе, но где и как

from turtle import*
class Shape:
    #self is how we refer to things in the clas from within itself. .self is the first parameter in any function defined inside a class
    #to access functions and variables inside the class, their name must be preceded with self and a full-stop (e.g. self.variable_name)
    def __init__(self,x,y):
        self.x=x #the shape has the attribute x (width)
        self.y=y #the shape has the attribute y (height)


    description="The shape has not yet been brought into being"
    author="No one has yet claimed authorship of this shape"

    def area(self):
        return self.x*self.y
    def perimeter(self):
        return 2*self.x+2*self.y
    def describe(self,text):
        self.description =text
    def authorName(self,text):
        self.author=text
    def scaleSize(self,scale):
        self.x=self.x*scale
        self.y=self.y*scale
    def print(self,shapename):
        print("This shape is a", shapename, "with dimensions:>",self.x,"by",self.y)
    def draw(self):
        turtle.forward(self.x)
        turtle.left(90)
        turtle.forward(se.f.x)
        turtle.left(90)
        turtle.forward(self.y)
        turtle.left(90)
        turtle.forward(self.y)
        turtle.left(90)



square=Shape(100,100)
square.print("square")
print("The perimeter is:",square.perimeter())
print(square.draw())

person Compoot    schedule 04.11.2017    source источник
comment
print(square.print()) Эта строка генерирует None на консоли, так как функция ничего не возвращает. Чтобы удалить его, просто удалите внешний print() и оставьте его. то есть square.print()   -  person Mahesh Karia    schedule 04.11.2017
comment
Благодарю вас! Есть мысли по второму вопросу!   -  person Compoot    schedule 04.11.2017
comment
Занимаюсь :) Как-нибудь обновлю   -  person Mahesh Karia    schedule 04.11.2017
comment
Благодарю вас! Добавил обновление. (код для рисования неверен), но это идея. Я не знаю, где заставить класс распознавать черепаху......   -  person Compoot    schedule 04.11.2017
comment
Внимание, выполняя from turtle import * и class Shape:, вы переопределяете собственный класс Shape черепахи! Вы можете подтвердить это, напечатав id(Shape) до и после вашего class Shape: (пере)определения. Вы должны либо ограничить свой импорт, import turtle или from turtle import Turtle, Screen, либо переименовать свой класс Shape во что-то другое.   -  person cdlane    schedule 09.11.2017


Ответы (1)


from turtle import*
class Shape:
    canvas = Screen() # creating object of screen class
    canvas.setup(800,800) # this will setup window on screen with dimension 800x800

    turtle_obj = Turtle() # creating object of turtle class which will be used to plot square on window

    #self is how we refer to things in the clas from within itself. .self is the first parameter in any function defined inside a class
    #to access functions and variables inside the class, their name must be preceded with self and a full-stop (e.g. self.variable_name)
    def __init__(self,x,y):
        self.x=x #the shape has the attribute x (width)
        self.y=y #the shape has the attribute y (height)

    description="The shape has not yet been brought into being"
    author="No one has yet claimed authorship of this shape"

    def area(self):
        return self.x*self.y
    def perimeter(self):
        return 2*self.x+2*self.y
    def describe(self,text):
        self.description =text
    def authorName(self,text):
        self.author=text
    def scaleSize(self,scale):
        self.x=self.x*scale
        self.y=self.y*scale

    def print(self):
        print self.x
        print self.y
        # now we are referring to class object turtle using self.turtle_obj and 
        # calling forward() function which will move plotting cursor in forward direction 
        # upto x pixels and left() will rotate direction by 90 degree 
        self.turtle_obj.forward(self.x)
        self.turtle_obj.left(90)
        self.turtle_obj.forward(self.y)
        self.turtle_obj.left(90)
        self.turtle_obj.forward(self.x)
        self.turtle_obj.left(90)
        self.turtle_obj.forward(self.y)
        self.turtle_obj.left(90)




square=Shape(100,100)
square.print()
  1. print(square.print()) Эта строка генерирует None на консоли, поскольку функция ничего не возвращает. Чтобы удалить его, просто удалите внешний print() и оставьте его. то есть квадрат.print()

  2. Да, это возможно, и я внес небольшие изменения в ваш код, и теперь он должен создавать квадрат на экране.

person Mahesh Karia    schedule 04.11.2017
comment
Благодарю вас! Функциональность черепахи теперь там!!!!!! НО.... он всегда рисует квадрат и не распознает входные параметры. - person Compoot; 04.11.2017
comment
Могу ли я просто изменить переменные «вперед» (например, 50) на self.x и self.y и т. д. - person Compoot; 04.11.2017
comment
@MissComputing Теперь я внес изменения, поэтому теперь он будет использовать пользовательский ввод, а 90 - это угол, под которым он меняет направление. Я надеюсь, что это сработает для вас :) - person Mahesh Karia; 04.11.2017
comment
Замечательно. Благодарю вас! - person Compoot; 04.11.2017
comment
В качестве последней просьбы, если возможно, не могли бы вы прокомментировать код, относящийся к добавлению черепахи. Чтобы пользователи понимали его реализацию. Как это часть класса....и т.д. (например, canvas = Screen() canvas.setup(800,800) turtle_obj = Turtle()) - person Compoot; 04.11.2017
comment
@MissComputing не понимаю, что именно вы спросили? можешь перефразировать, пожалуйста - person Mahesh Karia; 04.11.2017
comment
Ах, я просто хотел, чтобы вы объяснили, что происходит в той части, где вы инициализируете черепаху. Я не вижу и не понимаю, как все это согласуется с классом или как класс это видит. По сути, если бы вы могли просто тщательно прокомментировать свой превосходный ответ выше, это было бы очень полезно для многих! - person Compoot; 04.11.2017
comment
поэтому объект черепахи и холст и т. д. не реализуются/создаются как часть конструктора init, поэтому не понимаю, как/почему они находятся там, где они есть.. - person Compoot; 04.11.2017
comment
@MissComputing Я добавил пару комментариев в сам код. 1. объекты черепахи и холста создаются, как только создается объект класса, но они также могут быть созданы внутри конструктора, нет абсолютной необходимости держать его снаружи. 2. Большое спасибо за добрые слова, и я надеюсь, что решение работает для вас. - person Mahesh Karia; 04.11.2017