2016-02-21 6 views
0

Я прочитал несколько статей о ООП в python, но я не нашел ответа. вот мой пример код в качестве примера:Ожидаемое поведение определения класса в python

class Point(object): 
    """basic point""" 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 


class Circle(object): 
    """basic circle object""" 
    def __init__(self,center,radius): 
     self.center = center #should be a point object 
     self.radius = radius 

coord = Point(1, 2) 
a = Circle(coord, 4) 
b = Circle(4, 5) 

Если я правильно понял, это правильный код питона, а круг «б» не имеет точечный объект в качестве центра. если в объекте окружения есть метод, который использует объект центра для выполнения вычисления (например, для вычисления области круга), он не будет работать для объекта b. Должен ли я вводить в действие тип, или это ответственность программиста, чтобы дать ожидаемый тип объекта при создании экземпляра?

+1

@ jonrsharpe: Я не уверен, что это правильный дубликат. Этот вопрос более похож на «_do I to to», но обход по строкам «_how do I_ осуществляет проверку типов». –

+0

Точно, это больше о _do, я должен to_. Я бы подумал, что лучше проверить тип в определении объекта, поэтому будет легче поймать мою ошибку каждый раз, когда я создам экземпляр, но я не уверен, что это путь python. – math

ответ

0

Это зависит от вас, чтобы обеспечить соблюдение типов и до вызывающего, чтобы предоставить правильные данные.

Одна из основных философий сообщества python заключается в том, что мы все ответственные программисты. Если важно, чтобы тип был принудительно применен к случайным или вредоносным ошибкам, вы должны создать его в своих объектах.

1

Как говорили другие, вам необходимо обеспечить ввод текста.

Однако Python широко использует понятие уток печатая, что означает в вашем случае, вам не обязательно нужен Point объекта для центра, вам просто нужно что-то, что ведет себя так же, как ваш класс Поинта , В этом простом примере Point не предоставляет никаких методов; это просто класс, объекты которого будут иметь атрибуты x и y. Это означает, что ваш Circle может принять любой объект для его center до тех пор, как она обеспечивает x и y атрибуты, то есть, обеспечивает тот же интерфейс в Point.

Это означает, что самое важное - документ какой интерфейс предоставляет ваш класс и что каждая функция или метод ожидает от своих аргументов.