1. 类和对象的定义使用

  • 类的概述:在py中我们使用==class==来设计一个类,而类就类似于设定一个模板或者表格,以便后面可以批量使用同一个模板。而==类可以封装属性==。

  • 类的属性:即定义在类中的变量,也叫==成员表变量==。(数据)

  • 类的行为:即定义在类中的函数,也叫==成员方法==。(函数)

创建类的基本格式:

1
2
3
class 类的名称:(class就是类的标志)
类的属性
类的行为

对象可以理解为具体一个物体,当我们使用类构建出对象时,相当于去让一个变量去使用模板。进行编程

创建类对象的基本方式:

1
对象=类()

即调用类的模板准备使用

类方法定义:

1
2
def 方法名(self,形参1,形参2,...):
方法体

==注意:在上述类方法定义中,与函数最明显的区别在于,他有一个self,这个self必须填写==

self:

  1. 用来表示类对象自身的意思
  2. 要使用类对象调用时,self会自动被py传入
  3. 在方法内部,想要访问成员变量,必须使用self
  4. 在传参时,self可以被忽略,不用理会

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#创建类
class Student:
#类的属性
name=None
age=None
grade=None

#类的行为
def putin(self,Name,Age,Grade):
self.name=Name
self.age=Age
self.grade=Grade
#创建使用对象
stu=Student()
stu.putin(Name="张三",Age=18,Grade=600)


2. 构造方式和魔术方式(统称为内置方法)

2.1 init方法

init方法可以在对象创建时自动执行,并且将传入的参数传递给init使用

基本语法:

1
2
3
4
5
6
7
8
9
10
class 类名:
类的属性

def __init__(self,参数1,参数2,...):
self.属性1=参数1
self.属性2=参数2
.......

x=类(参数1,参数2,....)

在上述语法中。我们在构建对象时直接将需要写入的数据写在括号中,此时就可以将值自动放进类的属性中,便于进行操作

==注意:在使用init方法中,我们可以省略属性部分,因为在init方法中,也可以相当于创建了属性中的变量,所以,一但init中引用到的属性,都可以不用在属性中单独定义。==

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Student:
#在init中写了后此处可以不写
name=None
age=None
tender=None
grade=None

#会自动调用可以直接传参
def __init__(self,name,age,tender,grade):
self.name=name
self.tender=tender
self.age=age
self.grade=grade
print("对象数据已重置。")

#打印数据行为
def print_information(self):
print(self.name,self.grade,self.age,self.tender)

stu=Student("chen",18,"男","667")
stu.print_information()

上述示例中,我们使用类的行为直接打印出类的属性,免去了不必要的冗杂的代码。使代码更加简洁。

==注意:在类的构建方法中前后的两个下划线不可省略。并且在构建中也需要参数self==

2.2魔术方法(lt le eq str)

当我们需要对对象中的数据进行大小比较时无法直接通过对象进行比较,而魔术方法可以实现这种功能。并且也可以直接通过对象调用输出想要参数。魔术方法有很多,并不仅仅局限于以下介绍的四种。

2.2.1 比较的魔术方法

首先 lt le eq 三种方法是用来比较大小使用的,区别在于:

  1. lt仅仅用于大于和小于比较
  2. le仅仅用于小于等于和大于等于比较
  3. eq仅仅用于等于比较

==注意:三者是互相独立的,不能混淆,即使用的lt方法中是无法使用等于比较和大于等于以及小于等于。其他的方法同理,一个方法只能负责其支持的单独的功能。返回值为布尔类型==

示例:

1
2
3
4
5
6
7
8
9
10
11
12
class Car:
def __init__(self,id,price):
self.id=id
self.price=price

#lt只能小于或者大于,没有等于(le有大于等于和小于等于比较,eq判断等于)
def __lt__(self,other):
return self.price<other.price

car1=Car("鄂A8888",20)
car2=Car("鄂A9999",100)
print(car2>car1)

运行结果如下:

image-20231215163450897

比较成功,如果想用>=则需要le,==需要eq

其次探讨str

str是string缩写,目的是让对象可以直接以字符串形式输出

示例(未使用str):

1
2
3
4
5
6
7
8
class Car:
def __init__(self,id,price):
self.id=id
self.price=price

car=Car("鄂A8888",20)
print(car.id,car.price)
print(car)

结果:

image-20231215164305282

其中我们打印内容需要去追溯其中的具体属性。==如果没有str那么返回的是对象的内存地址==。

使用str示例:

1
2
3
4
5
6
7
8
9
10
class Car:
def __init__(self,id,price):
self.id=id
self.price=price

def __str__(self):
return f"车牌为:{self.id},价格为:{self.price}"

car=Car("鄂A8888",20)
print(car)

运行结果为:

image-20231215165216665


资料参考

b站的黑马程序员