美文网首页
面向对象

面向对象

作者: 不浪漫的浪漫_ea03 | 来源:发表于2017-06-10 11:57 被阅读0次

多继承

所谓多继承,即子类有多个父类,并且具有它们的特征

代码为先定义一个父类

classA:

defprintA(self):

print('----A----')

再定义一个父类(-.-!)

classB:

defprintB(self):

print('----B----')

定义子类

lassC(A,B):

defprintC(self):

print('----C----')

这里面的子类就可以继承两个父类,并且自己可以添加自己的函数方法

如果子类调用父类方法,而父类被调用的方法重复了,那么就会调用第一个父类的方法

在子类中父类方法里面的方法也可以调用,是一级一级向上找的,比方父类方法a里面有个其他类的方法b,子类c如果想调用c,就可以直接在父类里面实现

子类重写覆盖父类

所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法

子类中如果有父类方法,就会直接覆盖父类的方法

如果就只想调用父类的方法,可以在子类虫谷方法的后添加super().__init__(name)格式

多态

Python(鸭子语言)

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”表明python是弱类型语言,不需要定义类型

所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态

·Python “鸭子类型”

‘’’

python是一种弱类型语言,没有类型限制。

变量的类型永远是通过右侧的值判断的。

方法中的参数,传递任何值都行。但是要考虑方法内部的业务逻辑。

多态:

1、父类作为参数,可以传递父类和子类对象

2、接口作为参数,只能传递实现对象

所以有两种理解:

1、python不支持多态:

python是弱类型,没有类型限定,无法区分父和子,或者说接口和实现类

2、python处处是多态

python是弱类型,没有类型限定,传递任何内容都行

类属性和实例属性

类属性

就是公有的方法里面的属性,没有被self定义

实例属性

就是被定义值的属性,在对象里面被定义self特定值

class People(object):

country = 'china' #类属性

print(People.country)

p = People()

print(p.country)

p.country = 'japan'

print(p.country)      #实例属性会屏蔽掉同名的类属性

print(People.country)

del p.country    #删除实例属性

print(p.country)

在调用类方法时候,对象会自己创建一个环境把类方法的地址复制进去,当你做修改的时候,修改的只是对象里面的函数,不影响类方法

静态方法和类方法

类方法@classmethod方法里面尽量写(cls)

可以通过实例对象和类对象都可以访问方法

class People(object):

country = 'china'

@classmethod

def getCountry(cls):

print(type(cls))

print(cls)

return cls.country

p = People()

p.country=1

print(p.getCountry())

print People.getCountry()

在例子中,不管调用的是类方法还是实例方法都打印的是china

他们的指向都是一样的,都指向__main__.People

类方法可以用来修改类属性

class People(object):

country = 'china'

@classmethod

def getCountry(cls):

return cls.country

@classmethod

def setCountry(cls,country):

cls.country = country

p = People()

print(p.getCountry())

print(People.getCountry())

p.setCountry('japan')

print(p.getCountry())

print(People.getCountry())

Setmethod中的cls是用来修改getCountry中的cls值,而此cls值等同于类属性people里面的country = 'china',所以把country进行了修改

从类方法和实例方法以及静态方法的定义形式就可以看出来,类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;而实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。

静态方法

需要通过修饰器@staticmethod来进行修饰,静态方法不需要多定义参数

class People(object):

country = 'china'

__num = 100

@classmethod

def getCountry(cls):

return cls.country

@staticmethod

def myStaticMethod():

print('myStaticMethod...')

print(People.__num)

p = People()

p.country=1

print(p.getCountry())

print(People.getCountry())

print(p.myStaticMethod())

print(People.myStaticMethod())

此方法中p.country=1是在p中添加了一个属性,不改变类属性,而用静态方法调用对象时

相关文章

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • 总结.Net基础知识——献给即将入坑的同行们(一期)

    什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗...

  • 面向对象基础

    面向对象编程包括: 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程实现(OOP) 面向对象思想...

  • 20-OOP类与对象

    面向对象 Object Oriented 学习面向对象:XXOO 面向对象的学习: 面向过程和面向对象的区别: 面...

  • JavaScript面向对象核心知识归纳

    面向对象 概念 面向对象就是使用对象。面向对象开发就是使用对象开发。 面向过程就是用过程的方式进行开发。面向对象是...

  • 面向对象(未完成)

    面向对象 标签(空格分隔): 面向对象 第一章:面向对象(上) 什么叫面向对象 面向过程、面向对象、两者区别 构造...

  • 面向对象:创建对象&继承

    博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...

  • 面向对象

    了解什么是面向对象 首先,我们学习面向对象,要了解什么是面向对象,面向对象的重要概念:类,对象。 面向对象提出的这...

  • 面向对象的三大基本特征和五大设计原则

    1、面向对象概念 1.1、理解面向对象 面向对象是相对面向过程而言; 面向对象和面向过程都是一种思想; 面向过程:...

网友评论

      本文标题:面向对象

      本文链接:https://www.haomeiwen.com/subject/uliqqxtx.html