1、封装

封装,就是只能在类的内部访问,外部访问属性或方法会报异常,python中的封装很简单,只要在属性前或者方法名前加上两个下划线就可以,如self.__name,def __eat(self)这样就完成了属性和方法的私有化,也就是封装。
class hj:
_arg = 'world' # 封装
__kws = 'kws' # 封装
def __init__(self):
print(self._arg) # 内部调用一个下划线的封装
print(self.__kws) # 内部调用两个下划线的封装 # 提供封装访问函数让外部可以使用
def get(self):
print(self.__kws) h = hj()
print(h._arg) # 一个下划线的封装 外部是可以调用的
#print(h.__kws) # 两个下划线的封装 外部是无法调用的(其实是可以调用的,只不过python给你做个一个重名的操作(_hj__kws))
h.get() # 通过封装的方法来调用

2、继承

官方解释:所谓继承指提供了同一类对象共性的处理方法,子类继承父类共性的东西。 这样有利于代码的复用性,即子类拥有父类的方法。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。

通俗讲就是:父类的是子类的,子类的还是子类的。

python中继承也非常简单,定义一个Animal类,下面有一个eat()方法,再定义一个Dog类,Dog类中什么都不写,用pass代替。然后实例化一个dog,让dog继承Animal类,dog可以使用eat()方法。
class Animal(object):
def __init__(self,name):
self.name = name
def eat(self):
print(self.name,"吃饭") class Dog(Animal):
pass
dog=Dog("旺财")
dog.eat() 结果:
旺财 吃饭

重写:和父类的方法名称一样。但是在子类里面,重新实现。

  1、完全覆盖

class Animal:

    def __init__(self,name,private_v1):
self.name = name
self._private_v1 = private_v1
self.__private_v2 = "private_really"  # 私有化,不对子类开放 def run(self):
print("跑!!") class Dog(Animal): # 继承父类(Animal) def __init__(self,name,kind):
self.name = name
self.kind = kind def eat(self):
print("一只名叫 {} 的 {} 在啃骨头!!".format(self.name,self.kind)) def run(self): # 重写父类的run()方法
print("我是一条狗,我有四条腿跑!!") # 实例化
dog = Dog("二狗","哈士奇")
dog.run()
dog.eat() 结果:
我是一条狗,我有四条腿跑!!
一只名叫 二狗 的 哈士奇 在啃骨头!!

  2、保留父类的做法,在它的基础上再扩展其它的内容。(扩展方式:super())

    super()的2种表达:

      super().方法(参数列表)

      super(子类名,self).方法(参数列表)

class Animal:

    def __init__(self, name, private_v1):
self.name = name
self._private_v1 = private_v1
self.__private_v2 = "private_really" def run(self):
print("跑!!") class Dog(Animal): # 继承父类Animal def __init__(self, name, kind, private_v1):
# 方法一
super().__init__(name, private_v1) # 调用父类现成的方法
# 方法二
# super(Dog,self).__init__(name)
self.kind = kind # 扩展子类自己的特性 def eat(self):
print("一只名叫 {} 的 {} 在啃骨头!!".format(self.name, self.kind)) def gogo(self): # 完全颠覆父类的做法
super().run() # 父类做法
print("我是一条狗,我有四条腿跑!!") # 我的做法 # 实例化
dog = Dog("小白","二哈","private_v1")
dog.eat()
dog.gogo() 结果:
一只名叫 小白 的 二哈 在啃骨头!!
跑!!
我是一条狗,我有四条腿跑!!

多继承:

在python中是可以多继承的,继承的先后顺序是有区别的,当我们调用方法的时候,如果第一个继承的找不到,才会去第二个中找,但是只要在第一个类中找到调用的那个方法,即使参数个数不匹配也不会调用第二个父类中的,此时会报错。

class Student:
def study(self):
print("我是学生,我爱学习,我爱班级!") class Employee:
def work(self):
print("我要赚钱,我要工作,我爱工作!!") class People(Student,Employee): # 继承Student类,Employee类 def do_something(self):
self.work()
self.study() p = People()
p.do_something() 结果:
我要赚钱,我要工作,我爱工作!!
我是学生,我爱学习,我爱班级!

3.多态

python中本质上是没有真正多态这种思路,只是形式上有这样一个多态的思路。

class Animal(object):
def __init__(self,color):
self.color=color
def eat(self):
print("吃饭") class Cat(Animal):
def eat(self):
print("猫吃鱼") class Dog(Animal):
def __init__(self,name,age,color):
super(Dog,self).__init__(color)
self.name=name
self.age=age
def eat(self):
print("狗吃肉")
def feed(obj):
obj.eat() an=Animal("白色")#实例化Animal
cat=Cat("棕色")#实例化Cat
dog=Dog("小黄",2,"黄色")#实例化Dog feed(an)
feed(cat)
feed(dog) 结果:
吃饭
猫吃鱼
狗吃肉
定义了一个Animal父类,两个子类Cat和Dog里面都有eat()方法,最后再定义一个feed()喂养方法,
传入一个obj对象,调用obj.eat(),然后实例化Animal,Cat和Dog,分别在feed中传入实例化对象an,cat和dog会分别打印出不同的语句,这个就是python中的多态。

最新文章

  1. PowerDesigner中Name与Code同步的问题
  2. Android属性动画之ObjectAnimator
  3. 用libsvm进行回归预测
  4. jQuery 遍历(上)
  5. IntelliJ下使用Code/Live Template加快编码速度:程序员的工作不是写程序,而是写程序解决问题
  6. PTPX中的clock tree与LP design
  7. Mysql技术内幕-笔记-第三章 查询处理
  8. mysql 变量is null 和 not exists区别
  9. iOS 如何自定义NavigationBar的高度
  10. Linux常用的配置文件整理
  11. Jmeter3.1 使用技巧
  12. java实现单链表的增删功能
  13. svg 五花 元辅音 助读器
  14. Form 和 Input 对象
  15. gdb cheat sheet
  16. 前端js日期时间格式转换
  17. <Android基础> (六) 数据存储 Part 3 SQLite数据库存储
  18. MyBatis源码解析(十一)——Parsing解析模块之通用标记解析器(GenericTokenParser)与标记处理器(TokenHandler)
  19. 力扣(LeetCode)463. 岛屿的周长
  20. Kali Linux渗透测试实战 1.3 渗透测试的一般化流程

热门文章

  1. C#中的深度学习(三):理解神经网络结构
  2. 干货满满:python实现二维图制作
  3. 【命令】glances命令和dstat命令
  4. Ubuntu不能直接从windows复制粘贴文件或文字
  5. 手摸手带你学CSS
  6. 算法竞赛入门经典第二版第一章习题-(练习Java和C++语法)
  7. 【Hadoop】:Windows下使用IDEA搭建Hadoop开发环境
  8. 如何优雅的将Object转换成List
  9. 基于SpringBoot的博客项目
  10. js实现页面消息滚动效果