类的使用方法:
- class是关键字,表示要定义类了
- 类的属性,即定义在类中的变量(成员变量)
- 类的行为,即定义在类中的函数(成员方法)
创建类对象的语法:
成员变量和成员方法
那么,什么是类的行为(方法)呢?
可以看出,类中:
- 不仅可以定义属性用来记录数据
- 也可以定义函数,用来记录行为
其中:
- 类中定义的属性(变量),我们称之为:成员变量
- 类中定义的行为(函数),我们称之为:成员方法
类和对象
# 设计一个闹钟类
class Clock:
id = None
price = None
def ring(self):
import winsound
winsound.Beep(2000, 3000)
# 构建2个闹钟对象并让其工作
clock1 = Clock()
clock1.id = "003032"
clock1.price = 19.99
print(f"闹钟ID是:{clock1.id},价格:{clock1.price}")
clock1.ring()
构造方法
Python类可以使用:__init__
方法,称之为构造方法。
可以实现:
在创建类对象(构造类)的时候,会自动执行。
在创建类对象(构造类)的时候,将传入参数自动传递给__init__
方法使用。
构建类时传入的参数会自动提供给__init__
方法
构建类的时候__init__
方法会自动执行
# 构造方法的名称:__init__
class Student:
name = None
age = None
tel = None
def __init__(self, name, age, tel):
self.name = name
self.age = age
self.tel = tel
print("Student类创建了一个类对象") # 验证是否会自动运行
stu = Student("小明", 24, "18500006666")
print(stu.name)
print(stu.age)
print(stu.tel)
注意事项:
- 重要的事情说三遍,构造方法名称:init init init , 千万不要忘记init前后都有2个下划线
- 构造方法也是成员方法,不要忘记在参数列表中提供:self
- 在构造方法内定义成员变量,需要使用self关键字
这是因为:变量是定义在构造方法内部,如果要成为成员变量,需要用self来表示。
案例小作业
魔术方法
__str__
字符串方法
当类对象需要被转换为字符串之时,会输出如上结果(内存地址)
内存地址没有多大作用,我们可以通过__str__
方法,控制类转换为字符串的行为。
方法名:__str__
返回值:字符串
内容:自行定义
代码示例:
# 定义一个类
class Student:
def __init__(self, name, age):
self.name = name # 学生姓名
self.age = age # 学生年龄
# __str__魔术方法
def __str__(self):
return f"Student类对象,name:{self.name}, age:{self.age}"
stu = Student("小明", 31)
print(stu)
print(str(stu))
__lt__
小于符号比较方法
比较大于符号的魔术方法是:__gt__
不过,实现了__lt__
,__gt__
就没必要实现了
代码演示:
# 定义一个类
class Student:
def __init__(self, name, age):
self.name = name # 学生姓名
self.age = age # 学生年龄
# __str__魔术方法
def __str__(self):
return f"Student类对象,name:{self.name}, age:{self.age}"
stu1 = Student("小明", 19)
stu2 = Student("小红", 20)
print(stu1 < stu2)
print(stu1 > stu2)
__le__
小于等于比较符号方法
魔术方法:__le__
可用于: <= 、 >= 两种比较运算符上。
代码示例:
# 定义一个类
class Student:
def __init__(self, name, age):
self.name = name # 学生姓名
self.age = age # 学生年龄
# __le__魔术方法
def __le__(self, other):
return self.age <= other.age
stu1 = Student("小明", 19)
stu2 = Student("小红", 20)
print(stu1 <= stu2)
print(stu1 >= stu2)
__eq__
比较运算符实现方法
不实现__eq__方法,对象之间可以比较,但是是比较内存地址,也即是:不同对象==比较一定是False结果。
实现了__eq__方法,就可以按照自己的想法来决定2个对象是否相等了。
代码示例:
# 定义一个类
class Student:
def __init__(self, name, age):
self.name = name # 学生姓名
self.age = age # 学生年龄
# __eq__魔术方法
def __eq__(self, other):
return self.age == other.age
stu1 = Student("小明", 19)
stu2 = Student("小红", 20)
print(stu1 == stu2)
总结: