Я постараюсь быть краток.Хорошо .. Я всегда стараюсь быть кратким, но мой уровень успеха в значительной степени случайный .randint (0, никогда).Так что да.
Лол.Вы даже не смогли быть краткими в объявлении о том, что попытаетесь быть краткими.
Во-первых, нам нужно четко понимать, что означает «призвание к существованию».Предположительно, вы хотите новый молот каждый раз, когда случается self.tool = object
.Вам не нужен новый экземпляр каждый раз, например, когда вы получаете доступ к атрибуту инструмента, или вы всегда будете получать новый, предположительно не сломанный, молоток при каждой проверке self.tool.broken
.
Параподходы.
Во-первых, дать Tool метод копирования, который создает новый объект, который должен быть равен исходному объекту, но быть другим экземпляром.Например:
class Tool:
def __init__(self, kind):
self.kind = kind
self.broken = False
def copy(self):
result = Tool(self.kind)
result.broken = self.broken
return result
Затем в init для ученика вы говорите:
self.tool = tool.copy()
Второй вариант, используйте заводскую функцию.
def makehammer():
return Tool(hammer)
class Student:
def __init__(self, factory):
self.tool = factory()
Billy = Student(makehammer)
Я не могу думать ни о чемВ Python вы можете написать строку self.tool = object
и сделать так, чтобы объект автоматически сделал копию, и я не думаю, что вы захотите.Одна вещь, которая мне нравится в Python - это WYSIWYG.Если вы хотите волшебство, используйте C ++.Я думаю, что это затрудняет понимание кода, когда вы не только не можете сказать, что делает строка кода, вы даже не можете сказать, что он делает что-нибудь специальное.
Обратите внимание, что вы можетеПолучите еще больше от фабричного объекта .Например:
class RealisticFactory:
def __init__(self, kind, failurerate):
self.kind = kind
self.failurerate = failurerate
def make(self):
result = Tool(self.kind)
if random.random() < self.failurerate:
result.broken = True
if (self.failurerate < 0.01):
self.failurerate += 0.0001
return result
factory = RealisticFactory(hammer, 0.0007)
Billy = Student(factory.make)
Tommy = Student(factory.make) # Tommy's tool is slightly more likely to be broken