【Python】类的三大特性

一: 继承性
# 继承指的是类与类之间的关系

# 继承是创建新类的方法,Python中,
# 新的类可以继承一个或多个父类,父类有可以成为基类或者超类
# 新建的类称为派生类或子类

# 继承的方式可以分为单继承或者多继承

class Father:
pass

class Mother:
pass

class Child(Father, Mother):
pass

print(Child.__bases__)

# 继承的优先顺序: 新式类:广度优先 》 经典类:深度优先
# 派生:在子类中定义新的东西

# 经典类:Python2 没有继承object的类及子类都是经典类
# 新式类:Python3 全部都是新式类



# 继承实验
class A:
def __init__(self):

print('A')


class B(A):
def __init__(self):
super(B,self).__init__()
print('B')
pass


class C(A):
def __init__(self):
super(C, self).__init__()
print('C')


class D(B):
def __init__(self):
super(D, self).__init__()
print('D')
pass


class E(C):
def __init__(self):
super(E, self).__init__()
print('E')


class F(D,E):
def __init__(self):
super(F, self).__init__()
print('F')
pass

foo = F()
print(F.mro())

二: 多态性
# 多态性:可以在不考对象类型的情况下直接使用对象
# 如:len(str) len(int) print() 等,不许考虑类型直接使用(相对于C而言)
# 多态性的优点:1.增加程序的灵活性 2.增加了程序的扩展性
import abc


class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def run(self):
pass

# 动态多态性:
class Pig(Animal):
def run(self):
pass

class Dog(Animal):
def run(self):
pass

pig = Pig()
dog = Dog()
pig.run()
dog.run()

# 静态多态性
# str、int、list 都支持 ‘+’ 且不用考虑类型
三:封装性

# 隐藏属性: 2个‘_’开头
# 特点:1.外部无法直接访问
# 2.类的内部可直接访问
# 3.子类无法覆盖父类的隐藏属性

# 注意:1.此变形并没有真正的隐藏属性
# 2.变形只发生在类定义的过程中,定义后的赋值操作不会有效果
# 3.在继承中父类如果不想子类覆盖自己方法,可以定义为私有

class A:
__x = 1 #变形成_A__x
def foo(self):
print(self.__x) #也自动变形成_print(self._A__x)

# 封装的意义:并非是单纯的隐藏属性
# 1.封装数据属性:明确地区分内外部变量,控制外部对隐藏属性的行为
# 2.隔离复杂度

# 封装的扩展性:使用类的方法的人不需要考虑方法的实现过程,
# 开发者可以按需求修改方法的实现而不用考虑使用者
 
posted @ 2018-08-26 13:22  caya  阅读(324)  评论(0编辑  收藏  举报