Python 类与对象
类与对象的理解与封装特性
面向对象编程语言- 类: 一个模板, (人类)---是一个抽象的, 没有实体的- 对象: (eg: 张三, 李四)- 属性: (表示这类东西的特征, 眼睛, 嘴巴, 鼻子)- 方法: (表示这类物体可以做的事情, eg: 吃饭, 睡觉,学习)
1). 定义类:class: 类
from collections import Counter
例子: str, list, dict, Counter
object代表是, 人类继承于哪一个类, 如果不知道继承哪个类, 就写object;
class 人类(object):# print('hello')# 构造方法(魔术方法), 当创建对象的时候, 自动执行的函数def __init__(self, name, age, gender):# python解释器自动将对象传给self这个形参.# 看self到底是什么东西?# 将对象与该对象的属性绑定在一起.# 调用对象的属性两种方式:# - 张三.name# - self.nameself.name = name # 属性self.age = age # 属性self.gender = gender # 属性print(self) # 实质上是一个对象, <__main__.人类 object at 0x7f4fdc4864a8># 方法(在类里面定义的函数, 叫做方法)def eat(self):print("%s 正在吃饭..." %(self.name))
创建对象====根据模板(类)创建对象(真实存在)
张三 = 人类("张三", 10, 'male')
print("张三:", 张三)
看对象的属性
print(张三.name)
print(张三.age)
print(张三.gender)
让对象执行方法
张三.eat()
对象与类掌握练习
应用练习1
创建一个类People,拥有的方法为砍柴,娶媳妇,回家;实例化对象,执行相应的方法
显示如下:老李,18岁,男,开车去娶媳妇校思浩,22岁,男,上山去砍柴唐浩,10岁,女,辍学回家
提示:属性:name,age,gender方法:goHome(), kanChai(),quXiFu()
class People(object):def __init__(self,name,age,gender):self.name = nameself.age = ageself.gender = genderdef huiJia(self):print("%s,%d,%s,辍学回家" %(self.name,self.age,self.gender))def quXiFu(self):print("%s,%d,%s,开车去娶媳妇" %(self.name,self.age,self.gender))def kanChai(self):print("%s,%d,%s,上山砍柴" %(self.name,self.age,self.gender))
Laoli = People('老李',18,'男')
zhangsan = People('校思浩',22,'男')
lisi = People('唐浩',10, '女')Laoli.quXiFu()
zhangsan.kanChai()
lisi.huiJia()
类的私有属性与私有方法
类的私有属性:__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
类的方法:在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。self 的名字并不是规定死的(因为是形参),也可以使用 this,但是最好还是按照约定是用 self。
类的私有方法__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__private_methods。
class People(object):def __init__(self,name,age,gender, money):self.name = nameself.age = ageself.gender = genderself.__money = moneydef __play(self):print("王者荣耀正在进行时")p1 = People('user1', 10, 'male', 1000000)
print(p1.gender)
p1.__play
栈数据结构的封装
应用练习2:栈的数据结构
class Stack:栈的方法:入栈(push), 出栈(pop), 栈顶元素(top),栈的长度(lenght), 判断栈是否为空(isempty)显示栈元素(view)操作结果:栈类的实例化入栈2次出栈1次显示最终栈元素
class Stack(object):# 构造函数def __init__(self):self.stack = []def push(self, value):""":param value: 入栈元素:return:"""self.stack.append(value)return Truedef pop(self):# 判断栈是否为空if self.stack:# 获取出栈元素, 并返回item = self.stack.pop()return itemelse:return Falsedef top(self):if self.stack:return self.stack[-1]else:return Falsedef length(self):return len(self.stack)def isempty(self):return self.stack==[]def view(self):return ",".join(self.stack)s = Stack()
s.push('1')
s.push('2')
s.push('3')
s.push('4')
print(s.top())
print(s.length())
print(s.isempty())
s.pop()
print(s.view())
队列数据结构的封装
class Queue(object):# 构造函数def __init__(self):self.queue = []def push(self, value):self.queue.append(value)return Truedef pop(self):if self.queue:del self.queue[-1]else:return Falsedef front(self):if self.queue:return self.queue[0]else:return Falsedef rear(self):if self.queue:return self.queue[-1]else:return Falsedef length(self):return len(self.queue)def isempty(self):return self.queue==[]def view(self):return ",".join(self.queue)
s = Queue()
s.push('1')
s.push('2')
s.push('3')
s.push('4')
print(s.front())
print(s.rear())
print(s.length())
print(s.isempty())
s.pop()
print(s.view())
第二个特性之继承
概念:
- 父类与子类/基类和派生类
from io import TextIOWrapper
class Animals(object):def __init__(self, name, age):self.name = nameself.age= agedef eat(self):print('eating......')class Dog(Animals): # 当Dog没有构造方法时,执行Animals里面的构造方法def __init__(self, name, age, power):# self.name = name# self.age = age# 执行Dog的父类的构造方法;super(Dog, self).__init__(name, age)self.power = powerdef eat(self):print(self.power)super(Dog, self).eat()# 1. 如果子类没有的属性和方法, 则去父类找, 如果父类也没有, 就报错。
d1 = Dog("大黄",3,100)
print(d1.name)
print(d1.age)
print(d1.power)
d1.eat()
多继承原理
#coding:utf-8# # 经典类
# class Person1:
# pass
# p1 = Person1()
# print(p1)
#
# # 新式类
# class Person2(object):
# pass
# p2 = Person2()
# print(p2)
# 在python2中既有新式类也有经典类;
#
#
# 经典类的继承算法: 深度优先算法
# 新式类的继承算法: 广度优先算法
# python3全部都是新式类;class D:def test(self):print("D test")
class C(D):passdef test(self):print("C test")
class B(D):pass# def test(self):# print("B test")
class A(B,C):pass# def test(self):# print("A test")
a = A()
a.test()
三,多态性
#子类和父类存在相同方法时,子类会覆盖父类方法
#运形时总会调用子类方法--> 多态class Animal(object):def run(self):print('running...')def cry(self):print('crying...')class Dog(Animal):def run(self):print('dog running...')def eat(self):print('dog eating...')class Cat(Animal):def run(self):print('cat running...')cat = Cat()
cat.run()dog = Dog()
dog.run()
图书管理系统
# 假设每本书只有一本class Book(object):def __init__(self, name, author, state, bookIndex):self.name = nameself.author = author# 0:'已借出' 1:'未借出'self.state = stateself.bookIndex = bookIndexdef __str__(self):return 'Book(%s, %d)' %(self.name, self.state)class BookManage(object):# 存放所有书籍信息, 列表里面存放的是Book对象books = []def start(self):"""图书管理系统初始化数据"""self.books.append(Book('python', 'Guido', 1, 'IN23445'))self.books.append(Book('java', 'Guido1', 1, 'IN23445'))self.books.append(Book('C++', 'Guido2', 1, 'IN23445'))print("初始化数据成功!")def Menu(self):"""图书管理菜单栏"""while True:print("""图书管理操作1). 添加书籍2). 删除数据3). 查询书籍4). 退出""")choice = input("请输入你的选择:")if choice == '1':self.addBook()elif choice == '2':self.delBook()elif choice == '3':self.borrowBook()elif choice == '4':exit()else:print("请输入正确的选择!")def addBook(self):print("添加书籍".center(0, '*'))name = input("书籍名称:")bObj = self.isBookExist(name)if bObj:print("书籍%s已经存在" %(bObj.name))else:self.books.append(Book(name,input("作者:"), 1, input("存放位置:")))print("书籍%s添加成功" %(name))def delBook(self):print("删除书籍".center(50,'*'))for i in self.books:print(i)name = input("删除书籍名称:")a = self.isBookExist(name)if a:self.books.remove(a)print("删除%s成功" %(a))else:print("书籍不存在")def borrowBook(self):print("查询书籍".center(50,'*'))for i in self.books:print(i)name = input("查询书籍名称:")b = self.isBookExist(name)for book in self.books:if book == b:print(book)breakelse:print("%s不存在" %(b))breakdef isBookExist(self, name):"""检测书籍是否存在"""# 1. 依次遍历列表books里面的每个元素# 2. 如果有一个对象的书名和name相等, 那么存在;# 3. 如果遍历所有内容, 都没有发现书名与name相同, 书籍不存在;for book in self.books:if book.name == name:# 因为后面需要return bookelse:return Falseif __name__ == "__main__":bManger = BookManage()bManger.start()bManger.Menu()
Python 类与对象相关推荐
- python类包含对象的个数_python类与对象各个算数运算魔法方法总结
1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...
- Python类与对象实验
一.任务描述 本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. ...
- 【Python基础入门系列】第10天:Python 类与对象
首先,我已经假定你是个萌新或已经看了无数遍的垃圾文章,然后依然搞不懂类和对象,但是呢起码知道有类和对象这么两个玩意儿,我觉得有必要找一篇生动形象的示例来讲解. 由于你可能没有编程经验, 所以无法从学过 ...
- 一文讲全了Python 类和对象内容
摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan . Pytho ...
- python类和对象_Python类和对象
python类和对象 Python is an object-oriented programming language. Python Classes and Objects are the cor ...
- python中对象的特性_python中类与对象之继承,python类和对象理解,面对对象的三大特性之...
python中类与对象之继承,python类和对象理解,面对对象的三大特性之 面对对象的三大特性之继承 1.什么是继承? 在程序中,继承指的是class与class之间的关系 继承是一种关系,必须存在 ...
- python类、对象、方法、属性之类与对象笔记
为什么80%的码农都做不了架构师?>>> python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... ...
- python——类和对象之__dict__属性的使用
在 Python 类的内部,无论是类属性还是实例属性,都是以字典的形式进行存储的,其中属性名作为键,属性值作为对应的值. __dict__,可以使用类名或者类的实例对象来调用, 用类名直接调用__di ...
- python类和对象介绍_python中的类,对象,方法,属性等介绍
注:这篇文章写得很好.加底纹的是我自己的理解 python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性( ...
- python类和对象详解_Python公开课 - 详解面向对象
前言 在C语言中,单纯通过结构化的函数也可以实现很好的软件,顺序思路比较好理解:而C++则以面向对象的思维来进行代码组织,通过定义对象.成员变量.成员函数.以封装.继承和多态等方式来更灵活处理业务逻辑 ...
最新文章
- 10个堪称神器的学习网站
- 中国移动物联网客户规模突破2600家 联网接入终端达2300万台
- VM虚拟机中的centos6.3命令行模式添加GCC
- shell公共函数:/etc/init.d/functions
- oracle导入导出命令
- ARP(Address Resolution Protocol)地址解析协议初识
- FFMPEG结构体分析之AVFormatContext
- Http 请求处理流程(转)
- Flowable 数据库表结构 ACT_RE_DEPLOYMENT
- java非递归_Java非递归文件系统走路
- 径向基神经网络_谷歌开源Neural Tangents:5行代码打造无限宽神经网络模型,帮助“打开ML黑匣子”...
- java switch中if_详解java中if语句和switch的使用
- 搞不定的C语言--static的作用
- textContent和innerText属性的区别
- list stream().forEach
- 使用gc、objgraph干掉python内存泄露与循环引用!
- C语言输入汉字并输出
- Python基础之面向对象
- 图片前后旋转(头像前后旋转)
- java三角形边长_利用java解决三角形角度问题