Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
class Container:
def __init__(self, liquid):
self.liquid = liquid
def look_inside(self):
return f"{self.liquid} in container"
@classmethod
def create_with(cls, liquid):
return cls(liquid)
class Bottle(Container):
def look_inside(self):
return f"bottle full of {self.liquid}"
class Glass(Container):
def look_inside(self):
return f"A glass of {self.liquid}"
for c in (c.create_with("beer") for c in [Glass, Bottle]):
print(c.look_inside())
<?php
class Container {
public $liquid;
function __construct($liquid) {
$this->liquid = $liquid;
}
function look_inside() {
return "{$this->liquid} in container";
}
static function create_with($cls, $liquid) {
return new $cls($liquid);
}
}
class Bottle extends Container {
function look_inside() {
return "bottle full of {$this->liquid}";
}
}
class Glass extends Container {
function look_inside() {
return "A glass of {$this->liquid}";
}
}
foreach(['Glass', 'Bottle'] as $c) {
echo Container::create_with($c, 'beer')->look_inside() . PHP_EOL;
}
https://ideone.com/kvNwig
Вместо метода create_with можно вообще определить __toString, тогда в цикле достаточно будет echo Container::create_with($c, 'beer').
---