python 继承

Python 支持多重继承,一个子类可以继承多个父类。继承的语法格式如下:
class 子类类名(父类 1[,父类 2,...]):
      类体

如果在类定义中没有指定父类,则默认父类是 object 类。object 是所有类的父类,里面定义了一些所有类共有的默认实现,比如:__new__()。
定义子类时,必须在其构造函数中调用父类的构造函数。调用格式:父类名.__init__(self, 参数列表)。

class Person:

    def __init__(self,name,age):
        self.name = name
        self.__age = age #私有属性
    def say(self):
        print('姓名:{0},年龄:{1}'.format(self.name, self.__age))

# 继承父类
class Man(Person):
    def __init__(self,name,age,sex):
        Person.__init__(self,name,age) # 显示调用父类的构造方法
        self.sex = sex
    # 重写父类方法
    def say(self):
        print('姓名:{0},年龄:{1},性别:{2}'.format(self.name, self.age,self.sex))
        super().say() #调用父类的方法


m = Man('张三',12,'男')

# 查看对象属性
print(dir(m))

print(m._Person__age) #父类的私有属性继承后,属性名为‘_Person__age’
m.say()

# 查看类的继承层次结构
print(Man.mro()) #[<class '__main__.Man'>, <class '__main__.Person'>, <class 'object'>]

object根类

object 类是所有类的父类,因此所有的类都有 object 类的属性和方法。我们显然有必要深入研究一下 object 类的结构。

obj = object()
print(dir(obj))

根类对象的属性有:

['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

dir()查看对象属性

__str__(),用于返回一个对于“对象的描述”。

经常用于 print()方法,帮助我们查看对象的信息。

class Person:

    def __init__(self,name,age):
        self.name = name
        self.__age = age #私有属性

    def __str__(self):
        return '姓名:{0},年龄:{1}'.format(self.name,self.__age)

p = Person('李四',18)
print(p)

多重继承

Python 支持多重继承,一个子类可以有多个“直接父类”。具备了“多个父类”的特点。这样会被“类的整体层次”搞的异常复杂,尽量避免使用。

class A:
    print('class A')

    def test(self):
        print('test method A')

class B:
    print('class B')

    def test(self):
        print('test method B')

class C(A,B):
    print('class C')


c = C()
c.test()

多个父类中有同名的方法,执行顺序由继承父类的顺序决定,执行先继承的父类的方法。

super()获得父类定义

在子类中,如果想要获得父类的方法时,我们可以通过 super()

特殊方法和运算符重载

运算符实际上是通过调用对象的特殊方法实现的。

python 继承

python 继承

特殊属性

Python 对象中包含了很多双下划线开始和结束的属性,这些是特殊属性,有特殊用法。

python 继承

对象的浅拷贝与深拷贝

浅拷贝
Python 拷贝一般都是浅拷贝。拷贝时,对象包含的子对象内容不拷贝。因此,源对象和拷贝对象会引用同一个子对象。
·深拷贝
使用 copy 模块的 deepcopy 函数,递归拷贝对象中包含的子对象。源对象和拷贝对象所有的子对象也不同。