面向对象全称 Object Oriented Programming 简称OOP,是一种编程思想。是把对象作为一个程序的基本单元,把数据和功能封装在里面,能够实现很好的复用性,灵活性和扩展性。

基本概念:

面向对象是一种抽象,有两个基本概念:类和对象。

类是定义一件事物的抽象特点,而对象是类的一个实例。

例子:例如程序员是一个类,而具体的一个人,比如我就是一个对象。

基本要素:

属性和方法。以程序员为例。程序员具体下面属性和功能:

属性:年龄,性别和身高。

功能(方法):写代码,修电脑。

继承:

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。

多态:

用一个类继承几个不同的类,调用同一方法的时候,会有不同的反应。

实战一、定义类:

class ClassName:

statement1

...

statement2

构造函数

def init(self,[...):

析构函数,在销毁一个对象时使用的,当调用python垃圾回收的时候,才会调用。

def del(self,[..):

两个内建函数:

dir()返回一个对象的属性

type() 返回一个对象的类型

实战二、定义类的属性

1、直接在类里定义

类的对象会被所有类的对象所共享,所有类的属性都一样。

class Programer(object):

sex = 'male'

2、在构造函数里定义

class Programer(object):

def __init__(self,name,age):

self.name = name

self.age = age

python的类没有访问权限的问题,也就是说所有的变量都是可访问的。实际上python有私有的机制,就是在属性前加__,但是这种私有机制实际上也是伪私有,因为它其实是用一个别名来保存这个属性。例如在类A中的self.__a = 4, 实际上__a被修改成了_A__a保持在类中了。

3、常用属性定义

class Programer(object):

def __init__(self,name,age,weight):

self.name = name # 可以公开访问

self._age = age # 类的私有属性,但仍然可以访问

self.__weight = weight # 实现了部分私有属性

class Programer(object):

hobby = 'Play Computer'

def __init__(self, name,age,weight):

self.name = name

self._age = age

self.__weight = weight

def get_weight(self):

return self.__weight

if __name__ == '__main__':

programer = Programer('Albert',25,80) # 将对象实例化

print(dir(programer)) # 打印所有属性

print(programer.__dict__) # 从构造函数里获得的属性

print(programer.get_weight()) # 获取weiht 属性的方法

print(programer._Programer__weight) #

print(programer.name)

运行结果:

['_Programer__weight', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_age', 'get_weight', 'hobby', 'name']

{'_age': 25, '_Programer__weight': 80, 'name': 'Albert'}

80

80

Albert

实战三、定义类的方法

函数和方法介绍:

函数:是直接调用函数名调用的。

方法:必须是类的一部分,由别的程序来调用的。

@classmethod

调用的时候用类名,而不是某个对象。

@property

像访问属性一样调用方法。

class Programer(object):

hobby = 'Play Computer'

def __init__(self, name,age,weight):

self.name = name

self._age = age

self.__weight = weight

@classmethod

def get_hobby(cls):

return cls.hobby

@property

def get_weight(self):

return self.__weight

def self_introduction(self):

print(('My Name is %s\nI am %s years old\n') % (self.name,self._age))

if __name__ == '__main__':

programer = Programer('Albert',25,80)

print(dir(programer))

print(Programer.get_hobby()) # 类方法调用的函数

print(programer.get_weight) # 已属性的方式调用的函数

programer.self_introduction()

运行结果:

['_Programer__weight', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_age', 'get_hobby', 'get_weight', 'hobby', 'name', 'self_introduction']

Play Computer

80

My Name is Albert

I am 25 years old

实战四、类的继承

继承的子类:

1、会继承父类的属性和方法;

2、也可以自己定义,覆盖父类的属性和方法

用super()调用父类的方法:

class A(object):

def method(self,arg):

pass

class B(A):

def method(self,arg):

super(B,self).method(arg)

用类名调用父类的方法:

class A(object):

def method(self,arg):

pass

class B(A):

def method(self,arg):

A.method(arg)

子类的类型判断:

isinstance # 判断类型

issubclass # 判断是否是子类

class Programer(object):

hobby = 'Play Computer'

def __init__(self, name,age,weight):

self.name = name

self._age = age

self.__weight = weight

@classmethod

def get_hobby(cls):

return cls.hobby

@property

def get_weight(self):

return self.__weight

def self_introduction(self):

print(('My Name is %s\nI am %s years old\n') % (self.name,self._age))

class BackendProgramer(Programer):

def __init__(self,name,age,weight,language):

super(BackendProgramer,self).__init__(name,age,weight)

self.language = language # 定义language这个属性

if __name__ == '__main__':

programer = BackendProgramer('Albert',25,80,'Python')

print(dir(programer))

print(programer.__dict__)

print(type(programer))

print(isinstance(programer,Programer)) # 判断是否是Programer这个类

运行结果:

['_Programer__weight', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_age', 'get_hobby', 'get_weight', 'hobby', 'language', 'name', 'self_introduction']

{'_Programer__weight': 80, '_age': 25, 'language': 'Python', 'name': 'Albert'}

True

实战五、类的多态

多态的要素:继承和方法重写

class Programer(object):

hobby = 'Play Computer'

def __init__(self, name,age,weight):

self.name = name

self._age = age

self.__weight = weight

@classmethod

def get_hobby(cls):

return cls.hobby

@property

def get_weight(self):

return self.__weight

def self_introduction(self):

print(('My Name is %s\nI am %s years old\n') % (self.name,self._age))

class BackendProgramer(Programer):

def __init__(self,name,age,weight,language):

super(BackendProgramer,self).__init__(name,age,weight)

self.language = language

# 重写父类的 self_introduction方法

def self_introduction(self):

print(('My Name is %s\nMy favorite language is %s\n') % (self.name,self.language))

# 判断传进来的参数是否属于Programer对象,如果是,直接调用对象的self_introduction()方法

def introduce(programer):

if isinstance(programer,Programer):

programer.self_introduction()

if __name__ == '__main__':

# 将对象实例化

programer = Programer('Albert',25,80)

backend_programer = BackendProgramer('Tim',30,70,'Python')

introduce(programer)

introduce(backend_programer)

运行结果:

My Name is Albert

I am 25 years old

My Name is Tim

My favorite language is Python

多态优点:

添加功能比较简单,只要判断是否属于这个父类,而不需要判断传进来的是哪个子类,直击调用这个方法。

python 完全面向对象_python 面向对象(一)相关推荐

  1. python语言不支持面向对象_Python 面向对象(初级篇)

    概述面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." 面向 ...

  2. python封装举例_Python面向对象封装操作案例详解

    本文实例讲述了Python面向对象封装操作.分享给大家供大家参考,具体如下: 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 ...

  3. python 完全面向对象_Python面向对象

    1.面向对象技术简介 ·       类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例(对象是类实例化之后的结果). ·    ...

  4. python self理解_Python面向对象总结,让你快速掌握面向对象常用的用法

    python等面向对象的提出是为了更好的处理和管理同属一个类别的事情,这样就可以省去多余重复的基础代码,让程序变得更加简洁和强大.对于学习编程的朋友来说,熟悉掌握面向对象是非常重要的. 下面开始讲讲关 ...

  5. python编程语言继承_Python面向对象程序设计类的封装与继承用法示例

    本文实例讲述了Python面向对象程序设计类的封装与继承用法.分享给大家供大家参考,具体如下: 访问限制(封装) 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义 ...

  6. python oop示例_python 面向对象oop

    1 oop 对象世界观  -- oop是目前人类认知最接近实际生活的语言 一切事务皆对象 对象有运动规律和内部状态 对象之间可以相互调用 2.面向对象 唯一性:对象具有唯一性,不存在两个相同的对象,除 ...

  7. python calu()函数_python面向对象

    Python面向对象 @ 类 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础.类是一种用户定义的引用数据类型,也称类类型.每个类 ...

  8. python 鱼骨图_python面向对象编程,鱼骨图分析法

    一.面向对象编程 ​ 面向过程编程,核心是编程二字,过程指的是解决问题的步骤,即先干什么.后干什么.再干什么.然后干什么-- 与工厂的工艺流程差不多,前后都有影响 优点:复杂的问题流程化,进而简单化, ...

  9. python通过银行卡号_python面向对象编程实例---银行账号

    转载自python面向对象编程示例---银行账号 | 酷python​www.coolpython.net 在最初接触面向对象编程时,你会感到有些不习惯,但这种编程范式却有助于我们思考问题,前提是你准 ...

最新文章

  1. 用Python解“求整数段和”题
  2. python实现表格_零基础小白怎么用Python做表格?
  3. LeetCode算法题11:递归和回溯-解数独
  4. # 秒转换成分钟_10分钟时间,我用Excel完成了别人一天的数据分析工作
  5. Ansible 详解2-Playbook使用
  6. java ppt转图片 内存溢出_Java虚拟机内存及内存溢出异常
  7. 十一. Python基础(11)—补充: 作用域 装饰器
  8. 请列举出html中两个单标签,HTML基础有哪些单标签
  9. 可计算行与计算复杂性多带图灵机实例
  10. memcache使用方法测试 # 转自 简单--生活 #
  11. Java餐厅点餐系统【附源码报告】
  12. 网站CNZZ数据统计的实现方式
  13. Saas与Paas、Laas服务模式了解
  14. 诊断2018微商:从乱象到赋能,世界微商大会发明的新玩法为您指路
  15. Supervisor socket.error No such file or directory file /usr/lib64/pyth
  16. 软件企业具体可享受哪些所得税优惠政策?
  17. shiro框架的基本理解
  18. HTTPS/HTTP网络代理
  19. STM32F103C8T6模拟IIC控制4针0.96寸OLED显示屏
  20. 部落节点和跨群集搜索:Elasticsearch中联合搜索的未来

热门文章

  1. css img重复_20 个 CSS 快速提升技巧
  2. inssider v4.3.7 key_小布翻译软件下载-小布翻译器 v2.5.1 免费版
  3. C/C++线程基本函数
  4. HTML Parser 源代码
  5. Vue指令篇_v-model_数据双向绑定
  6. jQuery的引入和使用
  7. 【简便解法】1035 插入与归并 (25分)_37行代码AC
  8. [leetcode] 72.编辑距离
  9. python操作系统接口错误_Python os模块和sys模块 操作系统的各种接口
  10. 红帽7破解ROOT密码(简单易懂)