python 完全面向对象_python 面向对象(一)
面向对象全称 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 面向对象(一)相关推荐
- python语言不支持面向对象_Python 面向对象(初级篇)
概述面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." 面向 ...
- python封装举例_Python面向对象封装操作案例详解
本文实例讲述了Python面向对象封装操作.分享给大家供大家参考,具体如下: 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 ...
- python 完全面向对象_Python面向对象
1.面向对象技术简介 · 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例(对象是类实例化之后的结果). · ...
- python self理解_Python面向对象总结,让你快速掌握面向对象常用的用法
python等面向对象的提出是为了更好的处理和管理同属一个类别的事情,这样就可以省去多余重复的基础代码,让程序变得更加简洁和强大.对于学习编程的朋友来说,熟悉掌握面向对象是非常重要的. 下面开始讲讲关 ...
- python编程语言继承_Python面向对象程序设计类的封装与继承用法示例
本文实例讲述了Python面向对象程序设计类的封装与继承用法.分享给大家供大家参考,具体如下: 访问限制(封装) 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义 ...
- python oop示例_python 面向对象oop
1 oop 对象世界观 -- oop是目前人类认知最接近实际生活的语言 一切事务皆对象 对象有运动规律和内部状态 对象之间可以相互调用 2.面向对象 唯一性:对象具有唯一性,不存在两个相同的对象,除 ...
- python calu()函数_python面向对象
Python面向对象 @ 类 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础.类是一种用户定义的引用数据类型,也称类类型.每个类 ...
- python 鱼骨图_python面向对象编程,鱼骨图分析法
一.面向对象编程 面向过程编程,核心是编程二字,过程指的是解决问题的步骤,即先干什么.后干什么.再干什么.然后干什么-- 与工厂的工艺流程差不多,前后都有影响 优点:复杂的问题流程化,进而简单化, ...
- python通过银行卡号_python面向对象编程实例---银行账号
转载自python面向对象编程示例---银行账号 | 酷pythonwww.coolpython.net 在最初接触面向对象编程时,你会感到有些不习惯,但这种编程范式却有助于我们思考问题,前提是你准 ...
最新文章
- 用Python解“求整数段和”题
- python实现表格_零基础小白怎么用Python做表格?
- LeetCode算法题11:递归和回溯-解数独
- # 秒转换成分钟_10分钟时间,我用Excel完成了别人一天的数据分析工作
- Ansible 详解2-Playbook使用
- java ppt转图片 内存溢出_Java虚拟机内存及内存溢出异常
- 十一. Python基础(11)—补充: 作用域 装饰器
- 请列举出html中两个单标签,HTML基础有哪些单标签
- 可计算行与计算复杂性多带图灵机实例
- memcache使用方法测试 # 转自 简单--生活 #
- Java餐厅点餐系统【附源码报告】
- 网站CNZZ数据统计的实现方式
- Saas与Paas、Laas服务模式了解
- 诊断2018微商:从乱象到赋能,世界微商大会发明的新玩法为您指路
- Supervisor socket.error No such file or directory file /usr/lib64/pyth
- 软件企业具体可享受哪些所得税优惠政策?
- shiro框架的基本理解
- HTTPS/HTTP网络代理
- STM32F103C8T6模拟IIC控制4针0.96寸OLED显示屏
- 部落节点和跨群集搜索:Elasticsearch中联合搜索的未来
热门文章
- css img重复_20 个 CSS 快速提升技巧
- inssider v4.3.7 key_小布翻译软件下载-小布翻译器 v2.5.1 免费版
- C/C++线程基本函数
- HTML Parser 源代码
- Vue指令篇_v-model_数据双向绑定
- jQuery的引入和使用
- 【简便解法】1035 插入与归并 (25分)_37行代码AC
- [leetcode] 72.编辑距离
- python操作系统接口错误_Python os模块和sys模块 操作系统的各种接口
- 红帽7破解ROOT密码(简单易懂)