"""
用类实现对象和封装
对象:对应客观世界的事物,将描述事物的一组数据和与这组数据有关的操作封装在一起,
形成一个实体,这个实体就是对象
类:具有相同或相似性质的对象的抽象就是类
forexample:汽车是一个类,则具体一辆汽车就是一个对象
面向对象编程的特点:
1.封装性
封装是指将数据与具体操作的实现代码放在某个对象内部,使这些代码的实现细节
不被外界发现,外界只能通过接口使用该对象,而不能通过任何形式修改对象内部
实现,正是由于封装机制,程序在使用某一对象时不需要关心该对象的数据结构细
节及实现操作的方法。使用封装能隐藏对象实现细节,使代码更易维护,同时因为
不能直接调用、修改对象内部的私有信息,在一定程度上保证了系统安全性。类通
过将函数和变量封装在内部,实现了比函数更高一级的封装。
2.继承性
继承来源于现实世界,一个最简单的例子就是孩子会具有父母的一些特征,即每个
孩子都会继承父亲或者母亲的某些特征,当然这只是最基本的继承关系,现实世界中还存在
着更复杂的继承。继承机制实现了代码的复用,多个类公用的代码部分可以只在一个类中提
供,而其他类只需要继承这个类即可。
3.多态性
多态通常是指类中的方法重载,即一个类中有多个同名(不同参数)的方法,方法
调用时,根据不同的参数选择执行不同的方法。
"""
# 创建类
"""
  对象是类的一个实例,要想创建一个对象,先要定义一个类。在Python中,可使用class关键字来声明一个类,其语法格式如下:
    class 类名:
      类的属性(成员变量)
      ...
      类的方法(成员方法)
      ...
  类由三部分组成:
    1.类名:类的名称,通常他的首字母大写。
    2.属性:用于描述事物的特征,如人的姓名、年龄等。
    3.方法:用于描述事物的行为,如人具有说话、微笑等行为。
"""
class Dog:
"""
使用关键字class定义一个名称为Dog的类,类中有一个名字叫enjoy()的成员方法。从示例中可以看出,
方法跟函数的格式是不一样的,主要区别在于成员方法必须显式的声明一个self函数,而且位于参数列表的开头。
self代表对象本身,可以用来引用对象的属性和方法。
"""
  num=0
  def __init__(self,id=0,color="yellow"): # 构造方法
    self.id=id
    seif.color=color
  def enjoy(self):
    print("wangwang")
dog=Dog()
dog.enjoy()

# 创建对象
"""
程序想要实现具体的功能,仅有类是远远不够的,还要根据类来创建对象。在Python中,可以使用如下方法来创建一个对象。
  对象名=类名()
为对象添加属性,可以使用如下方法。
  对象名.属性名=值
  
"""
dog=Dog() # dog实际是一个变量,可以使用它类的属性和方法
dog.weight=52

# 多态性
class Animal: def kind(self):
print("i am animal") class Dog(Animal): def kind(self):
print("i am a dog") class Cat(Animal): def kind(self):
print("i am a cat") class Pig(Animal): def kind(self):
print("i am a pig") # 这个函数接收一个animal参数,并调用它的kind方法
def show_kind(animal):
animal.kind() """
狗、猫、猪都继承了动物类,并各自重写了kind方法。show_kind()函数接收一个animal参
数,并调用它的kind方法。可以看出,无论我们给animal传递的是狗、猫还是猪,都能正确
的调用相应的方法,打印对应的信息。这就是多态。
"""
d = Dog()
c = Cat()
p = Pig() show_kind(d)
show_kind(c)
show_kind(p) # 创建类与对象
"""
class 类名:
类的属性(成员变量)
...
类的方法(成员方法)
... 类名:类的名称,通常他的首字母大写
属性:用于描述事物的特征,如人的姓名、年龄等
方法:用于描述事物的行为,如人具有说话、微笑等行为
""" class Dog:
num = 0 # 类变量 def __init__(self, id=0, color="yellow"): # 构造方法
self.id = id
self.color = color def enjoy(self): # 成员方法
print("wangwang") def show(self, weight):
print("重量{}公斤".format(weight))
print("id:{},颜色:{}".format(self.id, self.color)) dog1 = Dog(color="grey") # 构造dog1对象
dog1.weight = 52 # 为类添加属性
dog1.show(dog1.weight)
dog1.enjoy()
dog2 = Dog("101", "black")
dog2.weight = 55
dog2.show(dog2.weight)
# 构造方法和析构方法
"""
Python的类提供了两个比较特殊的方法:__init__()和__del__(),分别用于初始化对象的
属性和释放对象所占用的资源
""" class Dog:
def __init__(self): # 构造方法
self.color = "black" def show(self):
print("id:{},颜色:{}".format(self.id, self.color)) def __del__(self):
print("对象被清除") dog = Dog()
dog.id = 1
dog.show()
del dog # 删除dog对象

Python中用类实现对象和封装的更多相关文章

  1. Python初识类与对象

    Python初识类与对象 类与对象 世界观角度分析类与对象 类是一个抽象的概念,而对象是一个实体的存在,对象由类创造而出,每个对象之间互相独立互不影响,一个对象可以同时拥有多个类的方法,实例化就是通过 ...

  2. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法

    1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...

  3. python的类和对象2(self参数)

    python的类和对象2(self参数) 1.python里面对象的方法都会有self参数,它就相当于C++里面的this指针:绑定方法,据说有了这个参数,Python 再也不会傻傻分不清是哪个对象在 ...

  4. 01 语言基础+高级:1-2 面向对象和封装_day06【类与对象、封装、构造方法】

    day06[类与对象.封装.构造方法] 面向对象类与对象三大特征——封装构造方法 能够理解面向对象的思想能够明确类与对象关系能够掌握类的定义格式能够掌握创建对象格式,并访问类中的成员能够完成手机类的练 ...

  5. Python 【类与对象】

    类与对象 把类的个例就叫做实例 (instance),可理解为“实际的例子”类是某个特定的群体,实例是群体中某个具体的个体 Python中的对象等于类和实例的集合:即类可以看作是对象,实例也可以看作是 ...

  6. python的类与对象

    类与对象 1.什么是类 类和函数一样是程序编程的一种方式,在处理某些问题的时候类比函数更加适合让编程变得简化,在python里面函数式编程和类编程都是为了简化代码的一种编程方式,具体应用那个则由具体问 ...

  7. python的类和对象——进阶篇

    写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多 ...

  8. 搞懂Python的类和对象名称空间

    代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间: 文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层 ...

  9. python的类和对象

    一.面向对象和面向过程 1.1面向过程的特点 优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. 缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身. 1.2面 ...

随机推荐

  1. nginx lua模块常用的指令

    lua_code_cache 语法:lua_code_cache on | off 默认: on 适用上下文:http.server.location.location if 这个指令是指定是否开启l ...

  2. PHP pdf转png windows版本

    链接:https://pan.baidu.com/s/1Bli-2HkucRTYTeujkcsmjg&shfl=sharepset 提取码:2une 1.php_imagick扩展 (1)下载 ...

  3. LGP4287题解

    小清新 manacher 题.题意清楚. 首先看到回文,自然而然地就去想 manacher 了.先想想,manacher 到底在干嘛? manacher 做的其实是一个暴力,枚举每一个位置最远能够伸到 ...

  4. Gin 09 HTTP 重定向

    gin http 重定向有两种方法,重写url 和 不重写的跳转.两种方法,gin 通过两个内置方法实现: demo package main import ( "github.com/gi ...

  5. Gin 08 上传文件

    单文件上传 cat index.html <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  6. 使用Geth 构建以太坊区块链并模拟挖矿过程

    使用Geth 构建以太坊区块链并模拟挖矿过程 Go-ethereum 是以太坊官方的一个Golang 实现,我们可以使用Geth 工具来创建创世区块并启动区块链,使用Clef 实现以太坊钱包的功能,以 ...

  7. 嵌入式无操作系统下管理内存和队列(类UCOS II思想)

    例子:存储日志,最多存128条,每条最大1MB. 内存方面 因为嵌入式不适合用动态内存,会产生碎片.这里我们用 u8 data[LOG_SIZE];开辟固定128MB的内存区,再对其分为128个1MB ...

  8. 论文解读(VGAE)《Variational Graph Auto-Encoders》

    Paper Information Title:Variational Graph Auto-EncodersAuthors:Thomas Kipf, M. WellingSoures:2016, A ...

  9. Linux服务器上搭建Centos7.0+Apache+php+Mysql网站

    一.安装Linux系统 1.1虚拟机搭建Linux Centos7.0版本,搭建过程省略. 二. 安装apache.php.mysql.php-gd等组件. 2.1安装Apache服务程序(apach ...

  10. HashMap集合类 5种最佳遍历方式

    1. 使用 Iterator 遍历 HashMap EntrySet 2. 使用 Iterator 遍历 HashMap KeySet 3. 使用 For-each 循环迭代 HashMap 4. 使 ...