_init __ () принимает 1 позиционный аргумент, но 2 были даны - PullRequest
1 голос
/ 01 октября 2019

Я тестирую некоторый код для ООП курса, но столкнулся с проблемой. Я программирую круг и цилиндр, с классом круга также в начале цилиндра. У меня есть 2 аргумента для цилиндра, но когда я даю 2 аргумента, мне говорят, что мне нужен только 1, и если я даю один аргумент, то получается, что выходной отсутствует.

с переменной а работает, но ошибка в переменной б. Что я не так

import math

class CCircle:
    def __init__(self):
        self._radius = 0
    @property
    def area(self):
        return self._radius**2 * math.pi
    @area.setter
    def area(self, value):
        self._radius = math.sqrt(value / math.pi)
    @property
    def circumference(self):
        return self._radius * 2 * math.pi
    @circumference.setter
    def circumference(self, value):
        self._radius = value / (2 * math.pi)

class CCylinder:
    def __init__(self, radius, height):
        self._circle = CCircle(radius)
        self._height = height
    @property
    def circumference(self):
        return self._circle.circumference
    @property
    def ground_area(self):
        return self._circle.area
    @property
    def total_area(self):
        return self._circle.area + self._height * self._circle.circumference
    @property
    def volume(self):
        return self._circle.area * self._height


a = CCircle()
b = CCylinder(1,4)

init () принимает 1 позиционный аргумент, но 2 были даны

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

Ваш класс CCircle должен начинаться так:

class CCircle:
    def __init__(self, radius=0):
        self._radius = radius

, чтобы вы получили радиус по умолчанию 0, который вам нужен, но также можете инициализировать его значением радиуса, как вы делаетев коде инициализации вашего класса CCylinder.

2 голосов
/ 01 октября 2019

Проблема с этой строкой:

self._circle = CCircle(radius)

, но __init__ для класса CCircle не принимает никаких аргументов (кроме self), поэтому это вызывает ошибку.

...