在Python中扩展对象的干净干练的方法
我基本上陷入了对象属性继承和扩展基类方法的双重问题 我正在重构我的代码,以遵循枯燥的原则,并讨论最佳设计解决方案 有没有一种简单而优雅的方法可以使对象从基类继承属性并扩展其现有方法 不映射对象B中对象A的每个属性 *没有一堆装饰师和财产?* 似乎不允许访问基类对象的属性 例如:在Python中扩展对象的干净干练的方法,python,class,object,design-patterns,multiple-inheritance,Python,Class,Object,Design Patterns,Multiple Inheritance,我基本上陷入了对象属性继承和扩展基类方法的双重问题 我正在重构我的代码,以遵循枯燥的原则,并讨论最佳设计解决方案 有没有一种简单而优雅的方法可以使对象从基类继承属性并扩展其现有方法 不映射对象B中对象A的每个属性 *没有一堆装饰师和财产?* 似乎不允许访问基类对象的属性 例如: class A(): def __init__(self): self.x = "whatever" self.y= "cumbersome" self.z = "
class A():
def __init__(self):
self.x = "whatever"
self.y= "cumbersome"
self.z = "idea"
def method1(self):
self.x = self.x.lower()
class B(A):
def __init__(self):
self.a = 87
@method1
def method1extended(self):
self.y =self.y.upper()
- 第一个问题:
- 第二个问题
是否有一个优雅的解决方案?用以下代码尝试一下
class A(object):
def __init__(self):
self.x = "whatever"
self.y= "cumbersome"
self.z = "idea"
def method1(self):
self.x = self.x.lower()
class B(A):
def __init__(self):
super(B, self).__init__()
self.a = 87
def method1(self):
super(B, self).method1()
self.y =self.y.upper()
以及我们改变的事情清单:
- 我们从
中添加了object
子类,以获得一个新样式的类。(注意,这仅适用于python版本2)A
- 我们在
A中添加了对
对象的调用。Python不会为您隐式地调用这些,您必须自己来做
现在调用B.。\uuuu init\uuuu
。这同样需要你来完成A.\uuuu init\uuuu
重命名为B.method1扩展
,使其阴影B.method1
A.method1
在应用自己的更改之前调用B.method1
A.method1
b=b();print(b.y)
您希望发生什么?实际上,我的第一个超类是一个页面工厂,它创建了一个具有页面通用属性的对象。给定页面属性(例如type、itle等),它将创建第三个特定对象,扩展页面对象方法,并通过修改继承的属性创建新属性。此代码只是简化设计问题的一种方法