一文,让你彻底了解,Python面向对象三大特性

Python面向对象三大特性

封装

封装顾名思义就是:将内部实现包裹起来,对外透明,提供api接口进行调用的机制
含义:对外面隐藏对象的属性和方法,仅提供接口
作用:安全性(通过私有变量改变对外的使用),复用性好

# 封装示例
#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Student(object):
    def __init__(self, name, score):
        # 属性仅前面有两个下划线代表私有变量,外部无法访问,因此我们定义了两个新的方法,
        # 这样可以避免外部通过score乱改分数,仅当我们自己知道接口才可以修改
        self.__name = name
        self.__score = score

    def info(self):
        print('name: %s ; score: %d' % (self.__name,self.__score))

    def getScore(self):
        return self.__score

    def setScore(self, score):
        self.__score = score

stu = Student('Tom',99)
print('修改前分数:',stu.getScore())
stu.info()
stu.setScore(59)
print('修改后分数:',stu.getScore())
stu.info()

继承

继承:即一个派生类(derived class)继承父类(base class)的变量和方法。
面向对象编程有个好处就是代码复用,而其中一种方法就是通过继承机制。继承就是说定义的一个新类,继承现有的类,获得现有类的非私有属性、方法。提到个私有,就是上面提到的那个前面加两个下划线的那个东西,他在外部无法调用,继承他的子类也不能。被继承的那个类称为基类、父类或超类,子类也可以叫做派生类。

单继承

单继承: 子类只继承一个父类

  1. 子类继承父类可以使用父类的方法和属性
  2. 继承的好处:是子类可以复用父类的代码
class Person(object): # Person是object子类, 
    
    def __init__(self):
        self.name = 'zs'
    def show(self):
        print('show')
        
# Teacher类继承于Person类
class Teacher(Person):
    pass
# 继承的调用
teacher = Teacher()  
teacher.name  # zs
teacher.show()  # show
多继承
# 多继承:相当于继承多个父类
class A(object):
    
    def show(self):
        print('A show')
        
class B(object):
    
    def show_info(self):
        print('B')
        
    def show(self):
        print("B show")
# 类C 继承于A,B同时可以使用A,B方法和属性
class C(A,B):
    pass

# 如果多个父类中有相同的方法名,默认调用括号中前面的类
C().show()  # A show
C().show_info()  # B
print(C.mro()) # mro表示类的继承顺序

多态

多态:是指一种事物的多种形态,根据对象类型的不同以不同的方式进行处理。
不同的 子类对象调用 相同的 父类方法,产生 不同的 执行结果,可以增加代码的外部 调用灵活度,都继承了一个父类,并且 都重写的父类的方法,让不同的对象调用相同的方法,会产生不同结果

# 创建一个主类
class Animal(object):
    # 添加属性name
    def __init__(self, name):
        self.name = name

    def run(self):
        pass

    def animalRun(self):
        self.run()

# 继承于Animal
class Cat(Animal):
    def run(self):
        print('cat is running')

# 继承于Animal
class Dog(Animal):
    def run(self):
        print('dog is running')
# 因为有name属性,所以必须传参
d = Dog('lllll')
c = Cat('pppppp')

# 主类调用方法,把对象传进去
Animal.animalRun(c)  # cat is running
Animal.animalRun(d)  # dog is running
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值