Python - 面向对象编程 - 什么是 Python 类、类对象、实例对象

简介: Python - 面向对象编程 - 什么是 Python 类、类对象、实例对象

什么是对象和类


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


类对象


什么是类对象

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


image.png


打印下类对象看看

# 类对象
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. 对象创建后,内存中就有一个类的实例对象了

image.png


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

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

__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 


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

相关文章
|
3天前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
3天前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
18天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
83 5
|
3月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
33 1
|
3月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
30 2
|
2月前
|
测试技术 API 数据安全/隐私保护
Python连接到Jira实例、登录、查询、修改和创建bug
通过使用Python和Jira的REST API,可以方便地连接到Jira实例并进行各种操作,包括查询、修改和创建Bug。`jira`库提供了简洁的接口,使得这些操作变得简单易行。无论是自动化测试还是开发工作流的集成,这些方法都可以极大地提高效率和准确性。希望通过本文的介绍,您能够更好地理解和应用这些技术。
224 0
WK
|
3月前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
24 0
|
C++ Python
54 python - 类属性、实例属性
54 python - 类属性、实例属性
46 0
|
Python
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
【从零学习python 】43. Python面向对象编程中的实例属性和类属性
91 0
|
Python
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问
194 0
【Python零基础入门篇 · 21】:构造函数、类属性和实例属性的访问