2014-11-19 2 views
-1

Я в настоящее время обучения основ классов, и я пришел с каким-то основным кодом выглядит следующим образом:методов класса Python 3x

class shape(object): 
    def __init__(self, num_sides, type): 
     self.num_sides = num_sides 
     self.type = type 

class square(shape): 
    def __init__(self, side_length): 
     self.num_sides = 4 
     self.type = 'regular quadrilateral' 
     self.side_length = side_length 
    def perim(): 
     return side_length * 4 
    def area(): 
     return side_length ** 2 

class circle(shape): 
    def __init__(self, radius): 
     self.num_sides = 1 
     self.type = 'ellipsis' 
     self.radius = radius 

Теперь, когда я печатаю следующее:

shape1 = square(5) 
shape1.perim() 

Я получаю следующий результат:

<bound method square.perim of <__main__.square object at 0x0000000003D5FB38>> 

Что это? Как я могу заставить python фактически вернуть периметр квадрата?

Также у меня есть еще один вопрос: Существуют ли какие-либо методы класса, кроме __init__() и __str__()? Если да, можете ли вы перечислить их, чтобы я мог уйти и исследовать их?

+0

вы забыли использовать 'self' из' 'perim' и area' методы – progo

+1

Если вы получаете' <связанный метод square.perim из <__ main__ .square object на 0x0000000003D5FB38 >> ', вы наверняка не написали' shape1.perim() ', а' shape1.perim'. – glglgl

+3

На ваши 2-й вопрос отвечает Python [отличная документация] (https://docs.python.org/3/reference/datamodel.html). – glglgl

ответ

1

Как показано, у вас будут проблемы с этим. Если вы хотите, чтобы круг и квадрат были подмножествами, заданные классы формы, тогда два подкласса должны быть отступом. Кроме того, на круге класса и квадрате вам действительно не нужна (форма). также обратите внимание на то, что я прокомментировал, поскольку он не нужен.

Это не выходит, поскольку я отправляю его. форма класса (объект): не отображается и подклассы не отступом, и я не могу показаться, чтобы сделать его показать

класса формы (объекта): Защиту инициализации (самость, num_sides, тип): # self.num_sides = num_sides self.type = тип

class square: 

    def __init__(self, side_length): 
     #self.num_sides = 4 
     #self.type = 'regular quadrilateral' 
     self.side_length = side_length 

    def perim(self): 
     return self.side_length * 4 
    def area(self): 
     return self.side_length ** 2 

class circle: 
    def __init__(self, radius): 
     #self.num_sides = 1 
     #self.type = 'ellipsis' 
     self.radius = radius 

    def area (self): 
     return 3.14 * self.radius ** 2 



shape2 = circle (5) 
print ('test of circle: ',shape2.area()) 

shape1 = square(5) 
print('test of square: ', shape1.perim()) 
1

Доступ к переменной с self

class square(shape): 
    def __init__(self, side_length): 
     self.num_sides = 4 
     self.type = 'regular quadrilateral' 
     self.side_length = side_length 
    def perim(self): 
     return self.side_length * 4 
    def area(self): 
     return self.side_length ** 2 
+0

Вам также нужно 'self' в качестве параметра метода – Holloway

1

Две вещи, Отступ инициализации формы и добавить себя. к методам перима и площади.

class shape(object): 
    def __init__(self, num_sides, type): 
     self.num_sides = num_sides 
     self.type = type 

class square(shape): 

    def __init__(self, side_length): 
     self.num_sides = 4 
     self.type = 'regular quadrilateral' 
     self.side_length = side_length 

    def perim(self): 
     return self.side_length * 4 
    def area(self): 
     return self.side_length ** 2 

class circle(shape): 
    def __init__(self, radius): 
     self.num_sides = 1 
     self.type = 'ellipsis' 
     self.radius = radius 

shape1 = square(5) 
print(shape1.perim()) 
Смежные вопросы