Для меня все не ново, но что вы пытаетесь сделать здесь s.circle.area(5)
имеет доступ к атрибуту Object, который также должен быть объектом, потому что вы пытаетесь вызвать метод для этого конкретного атрибута.
Ясно, '.'разрешить вам доступ только к атрибуту или функции.Например,
class Square:
def __init__(self, size):
self.size = size
def resize(self, new_size):
self.size = new_size
#Usage
>>> form = Square(5)
>>> print(form.size)
>>> 5 #output
>>> form.resize(120)
>>> print(form.size)
>>> 120 #output
В вашем коде это действительно странно и не имеет никакого смысла, много путаницы.Вы определяете функциональную область внутри функционального круга, который пытается создать атрибут области, используя объект несуществующий self.radius с существующим атрибутом pi.
Представляя, что что-то подобное может работать, вы пытаетесь получить доступФункция функции, вызывая метод круга (нет смысла, трудно объяснить).
Все еще в нашем квадрате, вы получаете доступ к атрибуту:
>>> form.size
Теперь вы пытаетесьвызовите из него функцию:
>>> form.size.action()
В этом случае вы используете целочисленный метод (int также являются классом, содержащим метод)
Вызывая метод объекта:
>>> form.reshape(8) #changing the current size
>>> form.reshape(8).action()
Таким образом вызывается метод возврата функции изменения формы.Кажется, вы не совсем уверены в определении функции (два ключевых слова def следуют друг за другом, это возможно, но не уверены, что это ваша цель), импорт Я не уверен, что он был выбран действительно мудро (numpy будет импортирован вкаждый объект создания, полезен для вас?).Будь осторожен с основами, чем больше ты будешь базовым, тем сильнее ты будешь понимать, что ты делаешь, а в программировании ты должен знать, что ты делаешь.
Как мнезаставить s.circle.area (5) работать?
По крайней мере, вы можете сделать
import numpy
class Circle:
def __init__(self, area = 0):
self.area = area
def area(self, new_area):
self.area = new_area
return self.area
class Object:
pi = numpy.pi
circle = Circle()
>>> obj = Object()
>>> obj.circle.area(5)
Я наконец могу сделать это действие!Многие вещи не являются хорошей практикой или не будут иметь желаемого поведения, если они не используются разумно, вы должны понимать, что происходит.Я понимаю, что ты учишься, и это действительно приятно, но не беги (и не очень быстро), не зная, что нужно ходить.(Я, пожалуй, немного извиняюсь, это для вас, будьте осторожны)
PS: Все, о чем я здесь говорил, имеет много документации.Определение класса действительно стандарт в Python.Объектно-ориентированное программирование без создания объекта может быть действительно парадоксальным.Вот некоторая документация: https://docs.python.org/3.7/tutorial/classes.html#a-first-look-at-classes