类与对象的理解与封装特性

 面向对象编程语言- 类: 一个模板, (人类)---是一个抽象的, 没有实体的- 对象: (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 类与对象相关推荐

  1. python类包含对象的个数_python类与对象各个算数运算魔法方法总结

    1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...

  2. Python类与对象实验

    一.任务描述   本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. ...

  3. 【Python基础入门系列】第10天:Python 类与对象

    首先,我已经假定你是个萌新或已经看了无数遍的垃圾文章,然后依然搞不懂类和对象,但是呢起码知道有类和对象这么两个玩意儿,我觉得有必要找一篇生动形象的示例来讲解. 由于你可能没有编程经验, 所以无法从学过 ...

  4. 一文讲全了Python 类和对象内容

    摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan  . Pytho ...

  5. python类和对象_Python类和对象

    python类和对象 Python is an object-oriented programming language. Python Classes and Objects are the cor ...

  6. python中对象的特性_python中类与对象之继承,python类和对象理解,面对对象的三大特性之...

    python中类与对象之继承,python类和对象理解,面对对象的三大特性之 面对对象的三大特性之继承 1.什么是继承? 在程序中,继承指的是class与class之间的关系 继承是一种关系,必须存在 ...

  7. python类、对象、方法、属性之类与对象笔记

    为什么80%的码农都做不了架构师?>>>    python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... ...

  8. python——类和对象之__dict__属性的使用

    在 Python 类的内部,无论是类属性还是实例属性,都是以字典的形式进行存储的,其中属性名作为键,属性值作为对应的值. __dict__,可以使用类名或者类的实例对象来调用, 用类名直接调用__di ...

  9. python类和对象介绍_python中的类,对象,方法,属性等介绍

    注:这篇文章写得很好.加底纹的是我自己的理解 python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性( ...

  10. python类和对象详解_Python公开课 - 详解面向对象

    前言 在C语言中,单纯通过结构化的函数也可以实现很好的软件,顺序思路比较好理解:而C++则以面向对象的思维来进行代码组织,通过定义对象.成员变量.成员函数.以封装.继承和多态等方式来更灵活处理业务逻辑 ...

最新文章

  1. 10个堪称神器的学习网站
  2. 中国移动物联网客户规模突破2600家 联网接入终端达2300万台
  3. VM虚拟机中的centos6.3命令行模式添加GCC
  4. shell公共函数:/etc/init.d/functions
  5. oracle导入导出命令
  6. ARP(Address Resolution Protocol)地址解析协议初识
  7. FFMPEG结构体分析之AVFormatContext
  8. Http 请求处理流程(转)
  9. Flowable 数据库表结构 ACT_RE_DEPLOYMENT
  10. java非递归_Java非递归文件系统走路
  11. 径向基神经网络_谷歌开源Neural Tangents:5行代码打造无限宽神经网络模型,帮助“打开ML黑匣子”...
  12. java switch中if_详解java中if语句和switch的使用
  13. 搞不定的C语言--static的作用
  14. textContent和innerText属性的区别
  15. list stream().forEach
  16. 使用gc、objgraph干掉python内存泄露与循环引用!
  17. C语言输入汉字并输出
  18. Python基础之面向对象
  19. 图片前后旋转(头像前后旋转)
  20. java三角形边长_利用java解决三角形角度问题

热门文章

  1. 十分钟快速Maven下载和安装说明
  2. cocos2d高级开发
  3. svn update中断,报cleanup错误
  4. Educoder jQuery 入门
  5. cxonev4验证用户_欧姆龙编程组态软件Omron CX-ONE V4.50 简体中文版
  6. VASSISTX在vs里面应用的快捷键
  7. java batik_Java端使用Batik将SVG转为PNG
  8. 用Python合并文件夹下所有pdf文件(包括多级子目录下的pdf文件)
  9. 极光im php,极光IM- IM 集成指南 - 极光文档
  10. 2022MathorCup-D题思路