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()))
print("")
p2 = person("p2")
print("p2-", id(p2))
print("p2 fun-", id(p2.test()))
print("调用方法对比:",id(p1.test()) == id(p2.test()))


执行结果

init-p1  1921848172840
p1- 1921848172840
test-p1  1921848172840
p1 fun- 140719454498016
init-p2  1921848175136
p2- 1921848175136
test-p2  1921848175136
p2 fun- 140719454498016
test-p1  1921848172840
test-p2  1921848175136
调用方法对比: True


实例变量和类变量


实例属性=实例变量

类属性=类变量

class Person():
    name = "cool guy"
if __name__ == "__main__":
    p = Person()
    print(p.name)  # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
    print(Person.name)  # 打印类的name属性
    p.name = "bad guy"  # 给实例绑定name属性
    p.age = 12  # 给实例绑定age属性
    print(p.age)  # 实例找到age直接打印
    print(p.name)  # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
    print(Person.name)  # 仍然打印类的name属性


执行结果

cool guy

cool guy
12

bad guy

cool guy


注意点

  • 在写代码时,要避免类属性和实例属性重名,否则实例变量会屏蔽掉类属性
  • 给实例绑定新的实例属性时,会直接覆盖掉重名的类属性

image.png


类方法会在下一篇幅介绍哦!

相关文章
|
19天前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
7天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
12天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
22天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【10月更文挑战第42天】本文是一篇技术性文章,旨在为初学者提供一份关于如何使用Python进行数据分析的入门指南。我们将从安装必要的工具开始,然后逐步介绍如何导入数据、处理数据、进行数据可视化以及建立预测模型。本文的目标是帮助读者理解数据分析的基本步骤和方法,并通过实际的代码示例来加深理解。
35 3
|
8天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
8天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
24 7
|
9天前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
9天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
25 5
|
8天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
29 3
|
12天前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。