Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$('#foo').slideUp(300).delay(800).fadeIn(400).delay(800);if fn and type(fn)==MethodType стоило бы заменить на isinstance(fn, MethodType).instance.add(5)
instance.mul(3)instance.fladd(5).flmul(3)Очевидный недостаток — мы не можем использовать __getattribute__ в своих целях.Не понял, разве с помощью super() это не решается?
module Chaining
def included(base)
base.class_eval do
instance_methods.each do |method|
alias "#{method}_without_chain" method
define_method method do |*args, &block|
r = block_given? ? send("#{method}_without_chain", *args, &block) : send("#{method}_without_chain", *args)
return self if r.nil?
r
end
end
end
end
end
ThingBase.class_eval { include Chaining }
dev = (
Device.init(port=Configs.dispenser_port, baudrate=Configs.dispenser_baudrate)
.test(donors=[0,1], destination=[-1])
.dispense(amount=100, donors=[0])
.disconnect())users_jets = (
s.query(User, UserJet)
.join((UserJet, User.current_jet_id == UserJet.id))
.filter(User.id.in_(players_ids))
.all())>Не очевидно, что метод test может принадлежать не классу Device (например, Device.init может возвращать объект Dispenser). А выглядит это так, будто Device.test существует.
With testObject
.Height = 100
.Text = "Hello, World"
.ForeColor = System.Drawing.Color.Green
.Font = New System.Drawing.Font(.Font, System.Drawing.FontStyle.Bold)
End With
>>> from pipe import *
>>> [1, 2, 3, 4, 5, 6] | average
3.5
Организация текучих (fluent) интерфейсов в Python