Вот некоторые (упрощенный) код для того, что я пытаюсь сделать:функции копирования, расположенные в тех случаях,
class a:
pass
class b:
def printSelf(self):
print self
instOfA = a()
instOfB = b()
instOfA.printSelf = instOfB.printSelf
instOfA.printSelf()
<__main__.b instance at 0x0295D238>
Когда я называю instOfA.printSelf(), он выводит себя как instOfB.
Но я хочу, чтобы я был instOfA, когда я вызываю instOfA.printSelf() и instOfB, когда я вызываю instOfB.printSelf()
Как мне это сделать без ручного определения printSelf в классе a?
Для тех, кому интересно, почему я даже хочу сделать что-то вроде этого, вот уже пример:
#Acts as a template for aInstance. I would have several aInstances that have common rules, which are defined by an instance of the aDefinition class (though I'd have multiple rule sets too)
class aDefinitionClass:
def setInput(self, val):
self.inputStr = val
def checkInputByLength(self):
return len(self.inputStr) < 5
def checkInputByCase(self):
return self.inputStr == self.inputStr.upper()
checkInput = checkInputByLength
class aInstance(aDefinition):
inputStr = ""
def __init__(self, ruleDefinition):
self.checkInput = ruleDefinition.checkInput
aDef = aDefinitionClass()
aDef.checkInput = aDef.checkInputByCase #Changing one of the rules.
aInst = aInstance(aDef)
aInst.setInput("ABC")
aInst.checkInput()
AttributeError: aDefinitionClass instance has no attribute 'inputStr'
Я понимаю, что это немного необычно, но я не мог придумать другой способ сделать это , Я действительно пытаюсь подклассифицировать экземпляр. Было бы выглядеть примерно так, если Python позволило ему:
class aInstance(aDef):
inputStr = ""
Вам не нужно [python] в заголовке, просто пометьте его python. – richo
Поставив [python] в их, я пытался сказать, что это что-то конкретное, как сделать что-то в Python, а не сказать, алгоритм, который может быть реализован на любом языке, но я решил сделать это на Python. – Ponkadoodle
Это именно то, что люди ожидают от знака python. :-) –