Python基础——6面向对象编程
类和实例
类是抽象的模版,例如汽车;而实例则是拥有相同方法的类的实现,例如汽车里面有大众、宝马、奔驰等等,这些车都能在地面上跑,但是它们的具体数据可以不一样。
calss Student(object) #object是所有类的父类,如果没有继承的父类就填该类
pass #定义类是通过pass关键字,之后可以实例化具体的类 calss Student(object) #类的实例
def __init__(self,name,age)#特殊函数__init__
self.name = name
self.age = age
def speak(self,word = ‘nihao’)
print(word + self.name)
python的实例是动态语言,所以允许用户自由绑定任何数据,例子:
student = Student(syz,18)
student.score = 100
访问限制
对于不想让外部访问的变量或者数据,可以定义私有变量,变量前面添加两个下划线__name,那么将不能通过student.__name的方式直接访问,实现原理是在内部生成_Student__name变量代替__name变量,但是此时注意,不要认为调用student.__name = syz的方式修改,因为此时相当于添加了一个__name的变量,而程序的self__的变量并没有变。
为了得到或者修改私有变量,需要定义修改函数或者获取函数
def set_name(self,name):
self.__name = name
def get_name(self):
return self.__name
注意:__abc__前后都有双下划线的变量时特殊变量,函数可以直接访问,注意私有变量不要这样定义。
私有变量跟前面的内部变量还是有区别的,因为前边只加一个下划线的变量属于内部变量,原则上还是可以被外部变量访问的。
继承和多态
子类定义可以继承父类,并且可以在父类的基础上做修改,从而体现多态性。
例子:
def Animal(object):
def run(self):
print(‘I’m running’) def Dog(Animal):
def run(self):
print(‘A dog running’)
pass def Cat(Animal):
def run(self):
print(‘A cat running’)
pass
鸭子类型,只要有相应的方法,就看做是类似的。只要会跑就把他看做鸭子
获取对象信息
isinstance(‘123’,str)
True
getattr() setattr() hasattr()
# 首先你有一个command.py文件,内容如下,这里我们假若它后面还有100个方法 class MyObject(object):
def __init__(self):
self.x = 9
def add(self):
return self.x + self.x def pow(self):
return self.x * self.x def sub(self):
return self.x - self.x def div(self):
return self.x / self.x
# 然后我们有一个入口文件 exec.py,要根据用户的输入来执行后端的操作
from command import MyObject
computer=MyObject() def run():
inp = input('method>') if inp == 'add':
computer.add()
elif inp == 'sub':
computer.sub()
elif inp == 'div':
computer.div()
elif inp == 'pow':
computer.pow()
else:
print('404')
上面使用了if来进行判断,那么假若我的command里面真的有100个方法,那我总不可能写100次判断吧,所以这里我们就会用到python的反射特性,看下面的代码
from command import MyObject
computer=MyObject()
def run(x):
inp = input('method>')
# 判断是否有这个属性
if hasattr(computer,inp):
# 有就获取然后赋值给新的变量
func = getattr(computer,inp)
print(func())
else:
# 没有我们来set一个
setattr(computer,inp,lambda x:x+1)
func = getattr(computer,inp)
print(func(x)) if __name__ == '__main__':
run(10)
Python基础——6面向对象编程的更多相关文章
- Day7 - Python基础7 面向对象编程进阶
Python之路,Day7 - 面向对象编程进阶 本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...
- Python基础7 面向对象编程进阶
本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典 ...
- Python基础之面向对象编程
面向对象编程 —— Object Oriented Programming 简写 OOP 01. 面向对象基本概念 我们之前学习的编程方式就是 面向过程 的 面向过程 和 面向对象,是两种不同的 编程 ...
- Day6 - Python基础6 面向对象编程
Python之路,Day6 - 面向对象学习 本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发 ...
- Python基础6 面向对象编程
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...
- python基础之面向对象编程介绍、类和对象
面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...
- Python基础-week06 面向对象编程基础
一.面向对象编程 1.面向过程 与 面向对象编程 面向过程的程序设计: 核心是 过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式 ...
- Python基础-week06 面向对象编程进阶
一.反射 1.定义:指的是通过字符串来操作类或者对象的属性 2.为什么用反射? 减少冗余代码,提升代码质量. 3.如何用反射? class People: country='China' def __ ...
- Python基础:函数式编程
一.概述 Python是一门多范式的编程语言,它同时支持过程式.面向对象和函数式的编程范式.因此,在Python中提供了很多符合 函数式编程 风格的特性和工具. 以下是对 Python中的函数式编程 ...
随机推荐
- BBS论坛(六)
6.1.优化json数据的返回 (1)新建utils/restful.py # utils/restful.py from flask import jsonify class HttpCode(ob ...
- JVM垃圾回收
1. 概念理解 1.1. 并行(Parallel)与并发(Concurrent) 并行:指多个垃圾收集线程并行工作,但此时用户线程仍然处于等待状态 并发:指用户线程与垃圾收集线程同时执行 1.2. ...
- asp.net core 系列 4 注入服务的生存期
一.服务的生存期 在容器中每个注册的服务,根据程序应用需求都可以选择合适的服务生存期,ASP.NET Core 服务有三种生存期配置: (1) Transient:暂时生存期,在每次请求时被创建. 这 ...
- C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解
C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解 在线提交: https://leetcode.com/problems/bitwise-and-of-num ...
- Solr 02 - 最详细的solrconfig.xml配置文件解读
目录 1 luceneMatchVersion - 指定Lucene版本 2 lib - 配置扩展jar包 3 dataDir - 索引数据路径 4 directoryFactory - 索引存储工厂 ...
- 痞子衡嵌入式:并行接口NAND标准(ONFI)及SLC Raw NAND简介
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ONFI标准及SLC Raw NAND. NAND Flash是嵌入式世界里常见的存储器,对于嵌入式开发而言,NAND主要分为两大类:S ...
- c# Task 篇幅二
上面一篇https://i.cnblogs.com/EditPosts.aspx?postid=10444773我们介绍了Task的启动,Task的一些方法以及应用,今天我们着重介绍一下Task其它概 ...
- NLP入门(七)中文预处理之繁简体转换及获取拼音
在日常的中文NLP中,经常会涉及到中文的繁简体转换以及拼音的标注等问题,本文将介绍这两个方面的实现. 首先是中文的繁简体转换,不需要使用额外的Python模块,至需要以下两个Python代码文 ...
- VisualStudio,用C#写的一个开源移动APP,资产管理类项目SmoSec
继SmoOne之后,Smobiler团队又推出一款用C#开发的APP开源项目. 这款开源项目名为SmoSec,目前包含资产管理.耗材管理两大类. 并且,未来会不断迭代,持续增加盘点.标签打印和仓库管理 ...
- 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结
在ASP.NET网站应用程序中,可以通过Server.MapPath方法来获取跟服务器有关的目录信息,如获取网站的根目录.获取当前代码文件所在的目录路径.获取当前代码所在路径的上级路径等.Server ...