什么是对象和类

https://www.cnblogs.com/poloyy/p/15178423.html

Python 类

类定义语法

最简单的类定义看起来像这样

class ClassName:
<statement-1>
.
.
.
<statement-N>

类定义与函数定义 (def 语句) 一样必须被调用执行才会起作用

类命名空间

  • 当定义类时,会创建一个新的命名空间,也是一个局部作用域
  • 上面的类定义栗子里,statement-1 到 statement-N 就是这个类的命名空间

类的取名建议规则

类名中的所有单词首字母要大写,采用驼峰命名法(例 GameCase )的书写方式

最简单的一个类

class Dog:
pass
  • 这个类没有属性也没有方法
  • 实际应用中,很少会创建空类,因为空类没有任何实际意义

包含属性、方法的一个类

class Person:
def introduce(self):
print('My name is %s, I am %d years old' % (self.name, self.age))

Person 类,有一个方法 introduce,有两个属性 name、age

通过 Person 类创建两个实例对象

# 对象一
tom = Person() # 对象属性
tom.name = 'tom'
tom.age = 10 # 对象二
jerry = Person() # 对象属性
jerry.name = 'jerry'
jerry.age = 20 # 调用对象的方法
tom.introduce()
jerry.introduce() # 输出结果
My name is tom, I am 10 years old
My name is jerry, I am 20 years old

类对象

什么是类对象

  • 声明了一个类,它就是一个类对象
  • 程序运行时,在内存中就会创建一个类对象,有且只有一个
  • 类对象也有自己的属性和方法,分别叫做:类属性、类方法(后面详解)

打印下类对象看看

# 类对象
class person:
pass print(person)
print(id(person)) # 输出结果
<class '__main__.person'>
140485598521200

打印的就是一个类对象和内存地址

类对象支持两种操作

  1. 属性引用
  2. 实例化

属性引用

  • 使用 Python 所有属性引用的标准语法: Obj.name
  • 有效的属性名称是类对象被创建时存在于类命名空间中的所有名称
class MyClass:
"""A simple example class"""
i = 12345 def f(self):
return 'hello world'

有效的属性引用

  • MyClass.i:返回一个整数
  • MyClass.f:返回一个函数对象
  • MyClass.__doc__:返回当前类的文档字符串
print(MyClass.i)
print(MyClass.f)
print(MyClass.__doc__) # 输出结果
12345
<function MyClass.f at 0x10f43f310>
A simple example class

实例化

实例化其实就是调用类对象,从而创建一个实例对象

c = MyClass()

创建类的新实例并将此对象分配给局部变量 c

实例对象

什么是实例对象

  • 通过类实例化操作生成对象就是实例对象
  • 一个类可以多次实例化,生成多个实例对象
# 实例对象
class person:
pass # 实例化:类名()
p1 = person()
p2 = person()
p3 = person()
print(p1, id(p1))
print(p2, id(p2))
print(p3, id(p3)) # 输出结果
<__main__.person object at 0x10e42b8b0> 4534220976
<__main__.person object at 0x10e42b880> 4534220928
<__main__.person object at 0x10e42b850> 4534220880

三个 person 类实例对象,分别有自己独立的内存地址

常说的面向对象编程是什么

  1. 设计类
  2. 创建类实例对象
  3. 实例对象调用方法

创建实例对象详解

  1. 在内存中为对象分配空间
  2. 调用初始化方法  __init__  为对象初始化
  3. 对象创建后,内存中就有一个类的实例对象了

由此可见,一个类可以有很多个对象,每个对象都有属于自己的属性、方法;

  • 创建出来的 对象 叫做 类的 实例对象
  • 创建对象的 行为 叫做 实例化
  • 对象的属性 叫做 实例属性
  • 对象调用的方法 叫做 实例方法

__init__、实例属性、实例方法后续详解

知识点

  • 每个对象都有自己独立的内存空间,保存自己的属性
  • 但是实例方法在内存中都只有一个,实例方法中的 self 就是实例对象的引用,当对象调用实例方法时,会默认把实例对象传给方法内部

如果不懂的话,看看下面代码的输出就知道啦; id() 是用于获取对象的内存地址

class person():
def __init__(self, name):
self.name = name
print(f"init-{self.name} ", id(self)) def test(self):
print(f"test-{self.name} ", id(self)) p1 = person("p1")
print("p1-", id(p1))
print("p1 fun-", id(p1.test)) p2 = person("p2")
print("p2-", id(p2))
print("p2 fun-", id(p2.test)) # 输出结果
init-p1 4435237568
p1- 4435237568
p1 fun- 4435260032 init-p2 4435237472
p2- 4435237472
p2 fun- 4435260032 

可以看到,两个实例对象调用的实例方法是同一个内存地址

Python - 面向对象编程 - 什么是 Python 类、类对象、实例对象的更多相关文章

  1. Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性

    什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html 什么是 Python 类.类对象.实例对象 https://www.cnblogs.com ...

  2. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  3. python面向对象编程(上)

    面向对象编程(OOP,Object Oriented Programming)是每一个高级编程语言都支持的编程方法,比如JAVA/C++/C#等等.学习面向对象编程是每一个程序员都绕不开的重点内容. ...

  4. python 面向对象编程(一)

    一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...

  5. Python面向对象编程指南

    Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...

  6. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

  7. python 面向对象编程(初级篇)

    飞机票 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最 ...

  8. Python面向对象编程(下)

    本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...

  9. python面向对象编程练习

    练习题 1.面向对象三大特性,各有什么用处,说说你的理解. 面向对象的三大特性: 1.继承:解决代码的复用性问题 2.封装:对数据属性严格控制,隔离复杂度 3.多态性:增加程序的灵活性与可扩展性 2. ...

随机推荐

  1. box-shadow详解

    今天课堂上有学生问到box-shadow这个属性,那么下面我们就来详细的解说下这个属性它的用法,box-shadow是css3中的一个属性,它可以向框添加一个或多个阴影. 首先我们来看它的语法: bo ...

  2. JavaScript学习笔记:你必须要懂的原生JS(二)

    11.如何正确地判断this?箭头函数的this是什么? this是 JavaScript 语言的一个关键字.它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用. this的绑定规则 ...

  3. Docker的学习体验

    由于兴致使然,便想学习一点Docker技术.于是,写了这篇学习Docker的体会.笔拙,见谅. 第一件事--把网线插上 相信很多人都被官网的<Sample application>的 do ...

  4. 算法leetcode二分算法

    二分算法通常用于有序序列中查找元素: 有序序列中是否存在满足某条件的元素: 有序序列中第一个满足某条件的元素的位置: 有序序列中最后一个满足某条件的元素的位置. 思路很简单,细节是魔鬼. 一.有序序列 ...

  5. PAT乙级:1056 组合数的和 (15分)

    PAT乙级:1056 组合数的和 (15分) 给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字.要求所有可能组合出来的 2 位数字的和.例如给定 2.5.8,则 ...

  6. 足不出户,一探古今,打造线上3D数字博物馆!

    随着3D技术的不断革新,为了让更多的用户领略历史之美,越来越多的博物馆开始举办线上展览.通过模拟不同的环境.灯光投影.360°无死角放大缩小展品,观众可以享受到身临其境的沉浸体验.不仅如此,给展品加上 ...

  7. tomcat日志详解

    1 tomcat 日志详解 1.1 tomcat 日志配置文件 tomcat 对应日志的配置文件:tomcat目录下的/conf/logging.properties. tomcat 的日志等级有:日 ...

  8. java命名规则/规范

    Java命名规则: 名称只能由字母.数字.下划线.$符号组成. 不能以数字开头,不能包含空格. 名称不能使用Java中的关键字. Java命名规范: 项目名全部小写:     project 包名全部 ...

  9. argparse模块基本用法

    argparse模块基本用法 在 python 编写的程序中,我们经常会看到的 argparse 相关代码,而它究竟怎么使用呢?接招! argparse 是一个命令行参数解析模块 现在提出需求,我需要 ...

  10. HashMap的转化时机

    HashMap的转化时机 /** * 使用红黑树(而不是链表)来存放元素.当向至少具有这么多节点的链表再添加元素时,链表就将转换为红黑树. * 该值必须大于2,并且应该至少为8,以便于删除红黑树时转回 ...