栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【python面向对象】类和对象(二)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【python面向对象】类和对象(二)

文章目录
  • 类和对象深认识
    • 1.实例对象
    • 2.对象内存图
    • 3.练习
    • 4.类成员
    • 5.类方法
    • 6.练习


类和对象深认识 1.实例对象

语法

  • 定义:对象.变量名
  • 调用:对象.变量名
  • 每个对象存储一份,通过对象地址访问。

练习:参照之前的例子进行改写,要求如下:

  1. 创建学生类:
    –数据∶姓名,年龄,成绩﹐性别
    –行为∶在控制台中打印个人信息的方法
  2. 在控制台中循环录入学生信息,如果名称是空字符,退出录入。
  3. 在控制台中输出每个学生信息(调用打印学生类的打印方法)。
  4. 打印第一个学生信息。
class Student:
    def __init__(self,name,age,score,sex):
        self.name = name
        self.age = age
        self.score = score
        self.sex = sex
    def print_stu_info(self):
        print("姓名是:%s,年龄:%s,成绩:%s,性别:%s"%(self.name,self.age,self.score,self.sex))
list01_student_info = []
while True:
    stu_name = input("请输入学生姓名:")
    if stu_name == "":
        break
    stu_age = input("请输入学生年龄:")
    stu_score = input("请输入学生成绩:")
    stu_sex = input("请输入学生性别:")
    stu = Student(stu_name,stu_age,stu_score,stu_sex)
    list01_student_info.append(stu)
    print(list01_student_info)
for stu_info  in list01_student_info:
    stu_info.print_stu_info()
print("---------------------------------------")
#获取第一个学生信息
stu_num01_info = list01_student_info[0]
stu_num01_info.print_stu_info()
2.对象内存图
"""
    对象内存图
"""
class Student:
    def __init__(self,name,age,score,sex):
        # 创建实例变量
        self.name = name
        self.age = age
        self.score = score
        self.sex = sex
    def print_stu_info(self):
        # 读取实例变量
        print("姓名是:%s,年龄:%s,成绩:%s,性别:%s"%(self.name,self.age,self.score,self.sex))

list01 = [
    Student("赵敏",28,100,"女"),
    Student("苏大强", 68, 62, "男")
]

s01 =list01[0]
s01.name ="小赵"
s01.score = 98
print(list01[0].name,list01[0].score)
# 小赵 98
list01[0].print_stu_info()
list01[1].print_stu_info()
#姓名是:小赵,年龄:28,成绩:98,性别:女
# 姓名是:苏大强,年龄:68,成绩:62,性别:男

内存图:

3.练习

练习1:定义函数,在list01中查找name是"苏大强”的对象,将名称与年龄打印在控制台中。

class Student:
    def __init__(self,name,age,score,sex):
        # 创建实例变量
        # 每个对象存储一份,通过对象地址访问。
        self.name = name
        self.age = age
        self.score = score
        self.sex = sex
    def print_stu_info(self):
        # 读取实例变量
        print("姓名是:%s,年龄:%s,成绩:%s,性别:%s"%(self.name,self.age,self.score,self.sex))
list01 = [
    Student("赵敏",28,100,"女"),
    Student("苏大强",68,62,"男"),
    Student("明玉",30,95,"女"),
    Student("无忌",29,70,"男"),
    Student("张三丰",30, 96,"男"),
]
def find01():
    for item in list01:
        if item.name == "苏大强":
            return item
        # 如果没找到﹐则返回空。而函数返回值默认就是空,所以可以不写。
        #return None
stu = find01()
print(stu.name,stu.age)
#苏大强 68

练习2:定义函数,在list01中查找所有女同学,将名称与性别打印在控制台中。

def find02():
    result = []
    for item in list01:
        if item.sex == "女":
            result.append(item)
    return result

re = find02()
for stu_info in re:
    print(stu_info.name,stu_info.age)
# 赵敏 28
# 明玉 30

练习3:定义函数,查找年龄>=30的学生数量。

def find03():
    count = 0
    for item in list01:
        if item.age >= 30:
            count += 1
    return count
print(find03())
# 3

练习4:定义函数,将list01中所有学生的成绩归零。

def set01():
    for item in list01:
        item.score = 0
set01()
for stu_info in list01:
    print(stu_info.name,stu_info.score)
# 赵敏 0
# 苏大强 0
# 明玉 0
# 无忌 0
# 张三丰 0

练习5:获取list01中所有学生的名字。

def get01():
    result = []
    for item in list01:
        result.append(item.name)
    return result
re = get01()
print(re)
# ['赵敏', '苏大强', '明玉', '无忌', '张三丰']

练习6:定义函数,在list01中查找年龄最大的学生对象。

def find04():
    max_age = list01[0]
    for item in range(1,len(list01)):
        if list01[item].age >= max_age.age:
            max_age = list01[item]
    return max_age
re = find04()
re.print_stu_info()
#姓名是:苏大强,年龄:68,成绩:62,性别:男
4.类成员

语法

  • 定义:在类中,方法外定义变量。
 class 类名: 	
 	变量名=表达式
  • 调用:类名.变量名
  • 不建议通过对象访问类变量
  • 说明
    –存储在类中。
    –只有一份,被所有对象共享。
  • 作用:描述所有对象的共有数据。
class ICBC:
    """
        工商银行
    """
    #表示总行的钱
    total_money = 1000000
    def __init__(self,name,money):
        self.name = name
        self.money = money
        # 表示从总行中扣除当前支行使用的金额
        ICBC.total_money -= money

i01 = ICBC("广渠门支行",100000)
i02 = ICBC("陶然亭支行",100000)
print("总行还剩%d钱"%ICBC.total_money)
#总行还剩800000钱

内存图:

5.类方法

语法
定义:

@classmethod..
def 方法名称(cls,参数列表):
	方法体

调用:

类名.方法名(参数列表)
不建议通过对象访问类方法
注意:可以通过类名访问实例方法,但必须手动传递对象地址
Student.print_self(s02)
也可以通过对象地址访问类成员
print(s01.count)
但是不建议上面的做法,记住主流算法

总结不建议的写法:

  1. 在类外添加实例成员
  2. 通过类访问实例方法(特殊情况除外)
  3. 通过实例访问类成员

说明:

  • 至少有一个形参,第一个形参用于绑定类,一般命名为’cls’
  • 使用@classmethod修饰的目的是调用类方法时可以隐式传递类
  • 类方法中不能访问实例成员,实例方法中可以访问类成员。

作用:操作类变量

class ICBC:
    """
        工商银行
    """
    #表示总行的钱
    total_money = 1000000

    # 因为类方法没有对象地址self,所以不能访问实例成员
    @classmethod
    def  print_total_money(cls):
        print(cls,ICBC)
        print("总行还剩%d钱"%ICBC.total_money)

    def __init__(self,name,money):
        self.name = name
        self.money = money
        # 表示从总行中扣除当前支行使用的金额
        ICBC.total_money -= money

i01 = ICBC("广渠门支行",100000)
i02 = ICBC("陶然亭支行",100000)
print("总行还剩%d钱"%ICBC.total_money)
#通过类名访问类方法﹐会将类名传入类方法。
ICBC.print_total_money()

运行结果为:
总行还剩800000钱
 
总行还剩800000钱
6.练习

定义对象计数器,要求如下:
定义学生类,创建3个学生对象。可以通过类变量记录学生对象个数,可以通过类方法打印学生对象个数。

class Student():
    count = 0
    @classmethod
    def print_count(cls):
        print(cls.count)
        
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
        Student.count +=1


stu01 = Student("张三",22,"男")
stu02 = Student("李四",25,"女")
stu03 = Student("莉莉",29,"女")
# print(Student.count)#3
Student.print_count()#3
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846277.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号