Python笔记-面向对象编程
1、类和实例
面向-对象的三大特点:数据封装、继承和多态
在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。
假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个dict表示:
std1 = { 'name': 'Michael', 'score': 98 }
std2 = { 'name': 'Bob', 'score': 81 }
而处理学生成绩可以通过函数实现,比如打印学生的成绩:
def print_score(std):
print('%s: %s' % (std['name'], std['score']))
如果采用面向对象的程序设计思想,我们首选思考的不是程序的执行流程,而是Student
这种数据类型应该被视为一个对象,这个对象拥有name
和score
这两个属性(Property)。如果要打印一个学生的成绩,首先必须创建出这个学生对应的对象,然后,给对象发一个print_score
消息,让对象自己把自己的数据打印出来。
class Student(object):
def __init__(self,name,score):
self.name=name
self.score=score
def print_info(self):
print('the {0} of score is {1}'.format(self.name,self.score))
def get_grade(self):
if self.score>=90:
return 'A'
elif self.score>=60:
return 'B'
else :
return 'C'
stu1=Student('Andre',90)
stu2=Student('Natasha',75)
stu3=Student('秋儿',59)
stu1.print_info()
stu2.print_info()
stu3.print_info()
print(stu1.name,stu1.get_grade())
print(stu2.name,stu2.get_grade())
结果:
the Andre of score is 90
the Natasha of score is 75
the 秋儿 of score is 59
Andre A
Natasha B
秋儿 C
小结:
要定义一个方法,除了第一个参数是self
外,其他和普通函数一样。要调用一个方法,只需要在实例变量上直接调用,除了self
不用传递,其他参数正常传入
name,score,方法这些数据和逻辑被“封装”起来了,调用很容易,但却不用知道内部实现的细节。
2、访问限制
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__
,在Python中,实例的变量名如果以__
开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问
class Student(object):
def __init__(self,name,score):
self.__name=name
self.__score=score def set_gender(self,gender):
if gender=='male' or gender=='female':
self.__gender=gender
else:
raise ValueError('incorrect value') def get_score(self):
return self.__score
def get_name(self):
return self.__name
def get_gender():
return self.__gender def print_info(self):
print('the {0} of score is {1}'.format(self.__name,self.__score)) def get_grade(self):
if self.__score>=90:
return 'A'
elif self.__score>=60:
return 'B'
else :
return 'C' #对象实例化
stu1=Student('Andre',90)
stu2=Student('Natasha',75)
stu3=Student('秋儿',59) #打印姓名,成绩信息
stu1.print_info()
stu2.print_info()
stu3.print_info() #set实例性别
stu4=Student('龙儿',66)
stu4.set_gender('male')
#print(stu4.get_gender()) #获取实例的姓名以及分数等级
print(stu1.get_name(),stu1.get_grade())
print(stu2.get_name(),stu2.get_grade())
print(stu3.get_name(),stu3.get_grade())
3、继承和多态
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
class Animal(object):
def run(self):
print('Animal is running......') class Dog(Animal):
def run(self):
print('Dog is running......') class Cat(Animal):
def run(self):
print('Cat is running...') def run_twice(animal):
animal.run() a = Animal()
d = Dog()
c = Cat() print('a is Animal?', isinstance(a, Animal))
print('a is Dog?', isinstance(a, Dog))
print('a is Cat?', isinstance(a, Cat)) print('d is Animal?', isinstance(d, Animal))
print('d is Dog?', isinstance(d, Dog))
print('d is Cat?', isinstance(d, Cat)) run_twice(c)
继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。
4、获取对象信息
使用type()函数可以判断对象的类型
>>> type(123)
对于class的继承关系来说,使用
<class 'int'>type()
就很不方便。我们要判断class的类型,可以使用isinstance()
函数。
>>> isinstance(h, Animal)
True
5、实例属性和类属性
我们定义一个类属性,这个属性虽然归类所有,但类的所有实例都可以访问到
class Student(object):
name = 'Student'
联系
为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:
class Student(object):
count=0
def __init__(self,name):
self.name=name
Student.count+=1
def get_gender(self,gender):
if gender=='male' or gender=='female':
self.__gender=gender
else:
raise ValueError('Values Error!') student1=Student('Natasha')
student1.get_gender('male')
student2=Student('Andrei') print(Student.count)
Python笔记-面向对象编程的更多相关文章
- python笔记 面向对象编程从入门到高级
目录: 一.概念 二.方法 2.1组合 2.2继承 2.3多态 2.4封装 2.5归一化设计 三.面向对象高级 3.1 反射(自省) 3.2 内置方法__getatter__, __ ...
- Python:面向对象编程3 定制类(有更新)
Python:面向对象编程3 定制类(有更新) ⚠️本文主要内容为对Data model相关知识点的提取学习记录.(内容来自文档和部分网页教程案例) ⚠️:这个连接指向<流畅的python&g ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- python笔记之编程风格大比拼
python笔记之编程风格大比拼 虽然我的python age并不高,但我仍然愿意将我遇到的或者我写的有趣的python程序和大家一块分享,下面是我找到的一篇关于各类python程序员的编程风格的比较 ...
- Python之面向对象编程学习
不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...
- PyTorch框架+Python 3面向对象编程学习笔记
一.CNN情感分类中的面向对象部分 sparse.py super(Embedding, self).__init__() 表示需要父类初始化,即要运行父类的_init_(),如果没有这个,则要自定义 ...
- python基础-面向对象编程
一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...
- python之面向对象编程
1.面向对象介绍: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种类 只要是对象,就肯定有属性 2. 面向对象的几个特性: class类: 一个类即对一类拥有相同属性的对象的抽象, ...
随机推荐
- FreeSql v0.5.x 功能介绍
弱类型 之前在操作实体时,必须传统泛型参数,现在可以实现弱类型实体的操作.以 Repository 为例: var repos = fsql.GetGuidRepository<object&g ...
- [翻译 EF Core in Action 1.9] 掀开EF Core的引擎盖看看EF Core内部是如何工作的
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
- kubernetes实践之四:深入理解控制器(workload)
一.Pod与controllers的关系 controllers:在集群上管理和运行容器的对象 通过label-selector相关联 Pod通过控制器实现应用的运维,如伸缩,升级等 二.Deploy ...
- TreeSet集合解析
TreeSet是实现Set接口的实现类.所以它存储的值是唯一的,同时也可以对存储的值进行排序,排序用的是二叉树原理.所以要理解这个类,必须先简单理解一下什么是二叉树. 二叉树原理简析 假如有这么一个集 ...
- 第13章 Base64 URL编码 - IdentityModel 中文文档(v1.0.0)
JWT令牌使用Base64 URL编码进行序列化. IdentityModel包括Base64Url帮助编码/解码的类: var text = "hello"; var b64ur ...
- osi参考模型(开放系统互连参考模型)
自互联网诞生以来,随着网络飞速发展,用户迫切要求能在不同体系结构的网络空间交换信息,使得不同的网络能够互联起来. 国际化标准组织(International Organization for Stan ...
- 【SQL Server】利用游标将学生表中的成绩转化为绩点
软件工程综合实践第一次作业 代码来源:班上同学的数据库大作业 alter table sc add GPA float; --加入绩点列 alter table sc ,);--将表按原始位置顺序编号 ...
- 数据库常用操作SQL语句
禁用触发器: alter table tb disable trigger tir_name 启用触发器: alter table tb enable trigger tir_name
- 【转】Python爬取AES加密的m3u8视频流的小电影并转换成mp4
最近发现一个视频网站,准备去爬取得时候,前面很顺利利用fiddler抓包获取网站的post数据loads为python字典数据,分析数据就能发现每个视频的连接地址就在其中, 发现这些都是m3u8文件流 ...
- git 建议使用
1 登录github官网首页 创建一个项目 2 本地克隆下载git项目 git clone https://github.com/wangguoxingduanxuejing/branch-pract ...