热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:python学习面对对象三大特性

篇首语:本文由编程笔记#小编为大家整理,主要介绍了python学习面对对象三大特性相关的知识,希望对你有一定的参考价值。.继承1

篇首语:本文由编程笔记#小编为大家整理,主要介绍了python学习面对对象三大特性相关的知识,希望对你有一定的参考价值。



. 继承

  1. 单继承

    继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类.

    面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制.

    如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如__str__)的实现

    语法:

      class 派生类名(基类名)

        .............

    子类以及子类实例化的对象,可以访问父类的任何方法或者变量

    类名可以访问父类所有内容

    子类的实例化对象也可以访问父类的所有内容


class Animal:
def __init__(self, name, sex, age):
self.name
= name
self.sex
= sex
self.age
= age
def eat(self,a1):
print(\'%s吃%s\' % (self.name,a1))
def drink(self):
print(\'%s喝东西\' % (self.name))
class Cat(Animal):
def miaow(self):
print(\'喵喵叫\')
# def eat(self): # 若子类创建了和父类中相同的方法,只执行自己类中的方法
# print(666)
class Brid(Animal):
def __init__(self, name,sex,age,wing): # self b1对象 name \'鹦鹉\',sex \'公\',age 20, wing \'绿翅膀\'
\'\'\'
self=b1对象
name=\'鹦鹉\'
sex=\'公\'
age= 20,
wing=\'绿翅膀\'
\'\'\'
# Animal.__init__(self, name, sex, age)
super().__init__(name,sex,age) # super(Brid,self).__init__(name,sex,age) 即想执行子类的方法,也想执行父类的方法
self.wing = wing
def bark (self):
print(\'嗷嗷叫\')
def eat(self,argv):
super().eat(argv)
print(\'鸟吃虫子...\')
class Chook(Animal):
def crow(self):
print(\'大爷laiwanya\')
b1
= Brid(\'鹦鹉\',\'\',20,\'绿翅膀\')
b1.eat(
\'金蝉\')

    如果既想执行子类的方法,有想执行父类的方法,一共有两种方法:

      1. 父类名.__方法名__(self,父类属性)

      2. super().__方法名__(父类的属性)

 

  2. 多继承

    多继承的查询顺序以经典类或者新式类区分:

      新式类:遵循广式优先查询  一条路走到倒数第二级,判断是否有其他路可以走到终点,如果有则返回走其他路,没有直接到终点

      经典类:遵循深度优先查询  一条路走到终点  

    其中单继承中,经典类或者新式类的查询方式都是一样的

 

二. 封装

  封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容.

  封装就是把类中的属性和方法定义为私有的,方法就是在属性名或方法名前加双下划线,而一旦这样定义了属性或方法名后,python会自动将其转换为_类名__属性名(方法名)的格式,在类的内部调用还是用双下划线加属性名或方法名,在类的外部调用就要用_类名__属性名(方法名)。父类的私有属性和方法,子类无法对其进行修改

  所以,在使用面向对象的封装特性时,需要:

    将内容封装到某处

    从某处调用被封装的内容


# 广义的封装: 实例化一个对象,给对象空间封装一些属性.
#
狭义的封装: 私有制.
# 私有成员:私有静态字段,私有方法,私有对象属性
# 私有静态字段
class B:
__money = 100000
class A(B):
name
= \'xxx\'
__age = 1000
def func(self):
print(self.__age)
print(A.__age) # 对于私有静态字段,类的内部可以访问.
print(\'func....\')
def func1(self):
print(self.__money)
print(A.__money)
a1
= A()
print(a1.name)
print(A.name)
print(a1.__age) # 通过实例化对象不能访问私有静态字段
print(A.__age) # 通过类名也不能访问私有静态字段
#
对于私有静态字段,类的外部不能访问.

  总结:

    对于私有静态字段,只有在本类内部才可以访问. 在类的外部,派生类均不可以访问

 

三. 多态

   多态就是不同的对象可以调用相同的方法然后得到不同的结果,有点类似接口类的感觉,在python中处处体现着多态,比如不管你是列表还是字符串还是数字都可以使用+和*。

  多态: 同一个对象的多种形态

    即使子类继承了一个或多个父类, 依然可以执行自己本类中的方法

  python 中有鸭子类型:

    鸭子类型就是,不同的类中含有相同的方法(函数),统称这些类为鸭子


class Str:
def index(self):
pass

class List:
def index(self):
pass

class Tuple:
def index(self):
pass

 



推荐阅读
author-avatar
专注自由近_515
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有