通过class关键字创建类
类有一个特殊的方法叫做构造函数,主要作用是定义实例对象的属性。它必须要被命名为__init__,括号里面可以放任意数量参数,但是第一个永远是被占用的,得用于表示对象自身,约定俗成叫self,它能帮你把属性的值绑定在实例对象上。self.name="张三"说明对象的属性是张三,如果写成name = "张三",前面没有self的话,Python只是在给普通的name变量赋值。
class Ren:
def __init__(self):
self.name = "张三"
实例化对象,创建对象使用类名括号里面放入参数。这样__init__方法就会被调用,并返回一个对象。self参数不需要传入。
ren1 = Ren()
print("ren1.name")
并不是所有对象属性的名字都叫张三,所以应该给__init__更加灵活的属性赋值。在创建对象时需要再括号里面传入一个名字
class Ren:
def __init__(self,ren_name):
self.name = ren_name
#创建对象时传入参数
ren1 = Ren("张三")
#创建实例后的参数就会是我传入的参数
Print(ren1.name)
还可以给对象添加更多属性
class Ren:
def __init__(self,ren_name,ren_age,ren_color):
self.name = ren_name
self.age = ren_age
self.color = ren_color
#创建对象时传入参数
ren1 = Ren("张三",18,"黑")
Print(f"名字叫{ren1.name}的人,年龄是{ren1.age}岁,是{ren1.age}种人")
类中的方法定义很简单,和我们创建普通的函数差不多,只有两个区别。第一是要写在class里面,前面要有缩进,表示属于该class的方法。第二是和__init__一样,第一个参数被self占用表示对象自身。
方法需要这个self的作用:一个是在方法里面去获取或修改和对象绑定的属性。比如print("喵" * self.age)
class Ren:
def __init__(self,ren_name,ren_age,ren_color):
self.name = ren_name
self.age = ren_age
self.color = ren_color
def speak(self,content):
print(f"小猫{self.name}在思考{content}")
print("喵" * self.age)
ren1 = Ren("张三",18,"黑")
ren1.speak("从容解决问题")
实践定义一个学生类
要求:
1.属性包括学生姓名、学号,以及语数英三科的成绩
2.能够设置学生某科目的成绩
3.能够打印出该学生的所有科目成绩
class Stundent:
def __init__(self, name, student_id): #默认属性,可以传入nane、student_id参数
self.name = name
self.student_id = student_id
self.grades = {"语文": 0, "数学": 0, "英语": 0}
def set_grade(self,course,grade): #方法可以传入course、grade两个参数
if course in self.grades: #如果传进来的course的值属于self.grades字典里面的键
self.grades[course] = grade #把值赋予字典对应键的值
def print_grades(self):
print(f"学生{self.name}(学号:{self.student_id})的成绩为:")
for course in self.grades: #针对self.grades字典,循环每一个course这个键
print(f"{course}: {self.grades[course]}分") #遍历科目及其对应分数
chen = Stundent("小陈","10011") #把2个参数传入Stundent类,实例化一个对象chen
chen.set_grade("语文",58) #chen对象使用set_grade方法设置科目成绩
chen.set_grade("数学",88) #chen对象使用set_grade方法设置科目成绩
chen.print_grades() #chen对象使用print_grades方法