the second one ends up thinking it is supposed to modify the return of the first one instead of the original class
. Да, это обычный синтаксис Python. Возврат self
не создает специальный синтаксис. Он просто гарантирует, что возвращаемый объект является правильным для цепочки.
Ваша задача инициализации чаще кодируется как
class SomeBlock():
def __init__(self, hardness=None, opaque=False, blastResistance=None):
self.hardness = hardness
self.opaque = opaque
self.blastResistance = blastResistance
ablock = SomeBlock(hardness=0.5, opaque=True, blastResistance=2)
И потому Python
не требует методов для доступа атрибутов, вы также можете написать
ablock = SomeBlock()
ablock.hardness = 0.5
...
Таким образом, если метод не возвращать self
, это обычно для реализации более сложных атрибутов установки.
Чаще всего метод возвращает новый объект того же класса. Это типично, например, для многих методов массива numpy
. A.dot(B)
возвращает новый массив, результат принятия точечного произведения A
и B
. A.dot(B).dot(C)
может выглядеть как цепочка, но это всего лишь последовательность действий на последовательных массивах.
Вы имеете в виду метод цепочки? –
@SotiriosDelimanolis Да, я думаю, это то, что было вызвано сейчас, когда вы упомянули об этом. –
Пожалуйста, отредактируйте ваш вопрос, если это так. –