Python 类的创建和实例化

面向过程和面向对象

面向过程通常是把完成某一个需求的所有步骤从头到尾逐步实现,根据开发的需求,将某些功能独立的代码封装成一个又一个的函数,最后顺序调用不同的函数。它注重步骤和过程,不注重职责和分工。面向过程不适合复杂项目的开发。

面向对象是一种抽象化的编程思想。它其实就是一个大型的封装,根据职责在一个对象中封装多个方法。

面向对象在完成某一个需求之前,首先要确定它要做的事情,也就是它的职责,然后根据职责确定不同的对象,在对象内部封装多个不同的方法,最后就是顺序的让不同的对象调用不同的方法。

面向对象更加注重对象和职责,不同的对象承担不同的职责。

比如说:吃饭

思考:几种方式可以吃到饭?

答:自己做饭和点外卖。

做饭:买菜 —> 洗米 —> 煮饭 —> 洗菜 —> 切菜 —> 炒菜 —> 吃饭

点外卖:打开外卖软件 —> 选择要吃的饭 —> 下单,等待骑手送达 —> 吃到饭了。

对比这两种方式,可以发现点外卖可以更容易吃到饭,我们只需要打开外卖软件下单就好了,不需要去关心怎样做饭的。

类和对象

Python 是面向对象的语言,在 python 中一切皆对象。

类是多个具有相同特征和行为的事物的统称。这些事物的特征被称为属性,行为被称为方法。

类就相当于制造飞机的图纸,是一个模板,负责创建对象的。

简单来说,类就是变量和函数的集合。这些变量函数需要具有相似性质的。

对象就是由类创建出来的一个具体的存在,可以直接使用。对象拥有对应类的所有属性和方法。它就相当于用图纸制造的飞机。

类和对象的关系

对象是根据类创建出来的,所以应该先有类,后有对象

对象拥有类中定义的所有属性和方法,不能多也不能少。

类只有一个,而对象可以有多个,不同的对象之间,它的属性可能会各不相同。

类的创建

使用 class 关键字去创建类。在创建类之前,我们应该先分析需求,看需要哪些类,类中有什么属性和方法。

类的三要素:类名(这类事物的名字,采用大驼峰命名法)、属性(这类事物所拥有的特征)、方法(这类事物所拥有的行为,通常是个动词)。

语法:

class Student:    # 类名首字母大写
    # 类属性:创建出的类具有哪些特征(被所有对象共享)
    name = '张三'
    age = 21
    iphone = '13672829899'
    # 方法:创建出的类有哪些行为
    def display(self):   # 通过 self.属性名 在类中访问对象属性
        print(f'我的名字叫{self.name},今年{self.age}岁,我的电话是{self.iphone}')
    def eat(self):
        print('我爱吃东西')

Student 是类名,类名可以是一个或者多个单词组成,每个单词首字母大写,单词之间不需要下划线(大驼峰命名法,例如:StuInfo)。类名后面可以跟括号(括号里面写继承的父类),也可以不跟。

如果没想好类里面怎么写,可以使用 pass 语句避免错误。

类的实例化(创建对象)(对象=属性+方法)

类定义完成后,就可以创建对象了。

创建类的对象又称为实例化类。在使用 类名() 创建对象时,python 解释器自动在内存中为对象分配内存,同时调用初始化方法 __init__() 为对象初始化。有了实例,我们就可以调用类中的属性(类中的所有变量,调用格式:对象名.变量)和方法(类中的所有函数,调用格式:对象名.函数())了。

在 Python 中创建类的对象不需要使用 new 关键字(Python 中没有 new),类似于函数调用方式。

1)语法格式

对象名 = 类名([参数列表])

对象名(变量)中记录的是对象的内存地址,通过 对象名. 来访问对象属性和方法。

参数列表中是否有参数,有几个参数,取决于初始化方法 __init__() 有几个参数(除了 self 参数),是位置参数还是默认值参数。

2)代码演示

创建 Student 类的实例对象:

class Student:  # 类名首字母大写
    # 类属性:创建出的类具有哪些特征(被所有对象共享)
    name = '张三'
    age = 21
    iphone = '13672829899'

    # 方法:创建出的类有哪些行为
    def display(self):  # 通过 self.属性名 在类中访问对象属性
        print(f'我的名字叫{self.name},今年{self.age}岁,我的电话是{self.iphone}')

    def eat(self):
        print('我爱吃东西')

stu = Student()   # stu变量中记录的是对象在内存中的地址,也就是说 stu 引用了新建的 Student 对象。

# stu变量中存储的是对象的内存地址。
# 根据输出结果可以看出这个变量所引用的对象是由Student创建的,在内存中的地址是0x0000022840FAF400
print(stu)  # <__main__.Student object at 0x0000022840FAF400>

# 访问类属性
print(stu.iphone)  
# 调用方法
stu.display()

输出结果:

图片[1]-Python 类的创建和实例化-尤尤'blog

注意:在计算机中,通常使用十六进制表示内存地址。(%d 输出十进制数字,%x 输出十六进制数字)

在类里面获取对象属性:self.属性名

在类外面获取对象属性:对象名.属性名

注意:

创建出来的对象也叫类的实例。

创建对象这个动作称为类的实例化。

对象的属性也叫实例属性。

对象调用的方法叫做实例方法。

一个类可以创建多个对象,每个对象都各自拥有自己的实例属性,通过 self. 来访问自己的属性和调用自己的方法。

这每一个对象都有自己独立的内存空间,保存着各自不同的属性,而多个对象的方法,在内存中只有一份,保存在类所在的内存空间,在调用这个方法时,只需要把对象的引用传递到方法内部(方法的第一个参数,通常叫 self )

图片[2]-Python 类的创建和实例化-尤尤'blog

self参数

self 是对类的当前实例的引用,用于访问该类中的变量。简单来说就是哪一个对象调用的方法,方法的第一个参数 self 就是哪一个对象的引用。

它可以不叫 self,可以叫其他的名字,但是 self 必须是类中任意方法的第一个参数。调用方法时不需要给 self 传参

在方法的内部可以通过 self.属性名 访问对象的属性,还可以通过 self.方法名 调用其他的对象方法。

# Python解释器遇到类并不立即执行,只是知道这里定义了一个Person类
class Person:
    def __init__(self,name):
        self.name = name
    def play(self):
        # 哪一个对象调用的方法,self就是哪一个对象的引用
        print(self)
        print('%s在打球。' % self.name)

# 创建一个Person对象,让变量per对这个对象进行了一个引用
per = Person('Alice')
print(per)
# per.name = 'Alice'   # 给per对象增加了一个属性name,其中存储的字符串是'Alice'
per.play()     # per对象调用play方法,这时将per对象传入play方法中的self参数

# 创建第二个Person对象赋给变量per1
per1 = Person('Tom')
print(per1)
# per1.name = 'Tom'
per1.play()
图片[3]-Python 类的创建和实例化-尤尤'blog

通过断点调试可以清晰的看到这个过程。

查看对象的所有属性和方法 — dir

在 Python 中一切皆对象,我们可以通过内置函数 dir() 来获取对象的所有属性和方法。

其中以双下划线开头和结尾(__方法名__)的格式的方法是 Python 提供的内置属性和方法。

>>> class Student:
...     pass
...
>>> dir(Student)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>>

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容