Python继承:有什么区别?

Python继承:有什么区别?,python,inheritance,subclass,Python,Inheritance,Subclass,给定父类“a” Class A(object): def __init__(self,a,b): self.a = a self.b = b 在以下选项中创建子类“B”有什么区别 选择1 Class B(A): def __init__(self,a,b,c): self.a = a self.b = b self.c = c 选择2 Class B(A): def __init__(se

给定父类“a”

Class A(object):
    def __init__(self,a,b):
        self.a = a
        self.b = b
在以下选项中创建子类“B”有什么区别

选择1

Class B(A):
    def __init__(self,a,b,c):
        self.a = a
        self.b = b
        self.c = c
选择2

Class B(A):
    def __init__(self,a,b,c):
        A.__init__(self, a, b)
        self.c = c

在这种情况下,没有。但是如果
A.\uuuuu init\uuuuuuuu
加载了复杂的逻辑呢?你不想在B中重复所有这些

选项2的一个增强功能是使用
super()
函数:

class B(A):
    def __init_(self,a,b,c):
        super(B, self).__init__(a, b)
        self.c = c

在这种情况下,没有。但是如果
A.\uuuuu init\uuuuuuuu
加载了复杂的逻辑呢?你不想在B中重复所有这些

选项2的一个增强功能是使用
super()
函数:

class B(A):
    def __init_(self,a,b,c):
        super(B, self).__init__(a, b)
        self.c = c

第一个选项将类
A
A
b
)的成员初始化为类
b

第二个选项使用
A
的构造函数在初始化
B
的成员之前初始化
A
的成员

在Python中设计类的更好方法是

class A(object):
    def __init__(self, a, b):
        self._a = a
        self._b = b

    @property
    def a(self):
        return self._a

    @property
    def b(self):
       return self._b

class B(A):
    def __init__(self, a, b, c):
        super(B, self).__init__(a, b)
        self._c = c

    @property
    def c(self):
        return self._c
成员名称中的
提到不应直接访问成员。decorator
@property
为成员提供直接访问器

请注意,成员是只读的。此类没有指定设置器。例如,
c
的setter可以声明如下

@c.setter
def c(self, c):
    self._c = c

第一个选项将类
A
A
b
)的成员初始化为类
b

第二个选项使用
A
的构造函数在初始化
B
的成员之前初始化
A
的成员

在Python中设计类的更好方法是

class A(object):
    def __init__(self, a, b):
        self._a = a
        self._b = b

    @property
    def a(self):
        return self._a

    @property
    def b(self):
       return self._b

class B(A):
    def __init__(self, a, b, c):
        super(B, self).__init__(a, b)
        self._c = c

    @property
    def c(self):
        return self._c
成员名称中的
提到不应直接访问成员。decorator
@property
为成员提供直接访问器

请注意,成员是只读的。此类没有指定设置器。例如,
c
的setter可以声明如下

@c.setter
def c(self, c):
    self._c = c
它不应该是
super(B,self)
而不是
super(A,self)
?它不应该是
super(B,self)
而不是
super(A,self)