Возможно ли частично переопределить метод? Что я имею в виду, например, у меня есть один метод, и я хочу обновить его с некоторыми изменениями, но я не хочу изменять весь метод (я не мог понять, как обновить старый метод, наследуя его, но не полностью меняя его). Итак, можно сделать что-то вроде этого:Python - метод частично переопределения
class A(object):
def test(self, num):
tmp = 3
res = tmp + num
print
return res
a = A()
a.test(5)
returns 8
class B(A):
def test(self, num):
tmp = 5
a = super(B, self).test(num)
return a
b = B()
b.test(5)
returns 10
Есть ли способ, чтобы обновить только tmp
значение, в результате чего Рез = TMP + Num, поэтому он будет использовать его, как это определено в A
классе. Или, если я хочу так обновляться, есть только способ переписать все в этом методе (потому что, используя super, я получаю только конечное значение, возвращаемое методом)?
Как предложил мне обновить вопрос с методом я пытаюсь лишь частично обновить:
def _display_address(self, cr, uid, address, without_company=False, context=None):
'''
The purpose of this function is to build and return an address formatted accordingly to the
standards of the country where it belongs.
:param address: browse record of the res.partner to format
:returns: the address formatted in a display that fit its country habits (or the default ones
if not country is specified)
:rtype: string
'''
# get the information that will be injected into the display format
# get the address format
address_format = address.country_id and address.country_id.address_format or \
"%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s"
args = {
'state_code': address.state_id and address.state_id.code or '',
'state_name': address.state_id and address.state_id.name or '',
'country_code': address.country_id and address.country_id.code or '',
'country_name': address.country_id and address.country_id.name or '',
'company_name': address.parent_id and address.parent_id.name or '',
}
for field in self._address_fields(cr, uid, context=context):
args[field] = getattr(address, field) or ''
if without_company:
args['company_name'] = ''
elif address.parent_id:
address_format = '%(company_name)s\n' + address_format
return address_format % args
Так что для этого метода мне нужно только обновить/изменить address_format
и args
, вставляя дополнительные значения.
Вы можете сделать 'tmp' параметром исходной функции' test', я думаю, что это был бы самый простой способ. – rlms
Да, это было бы легко, но дело в реальном коде, я не могу этого сделать, поскольку я не могу изменить старый метод, я могу только обновить его через наследование. Поэтому я полагаю, что мне нужно переписать весь метод. – Andrius
Каков реальный метод? В некоторых случаях вы можете сделать это с помощью декораторов. – rlms