python编程面向对象类
(1) 类的定义
【类的定义】
类的意义:封装代码(封装变量和函数)
类的名字:驼峰式
类的定义在一个模块中,调用在另一个模块中# 在d1.py中的代码 class StudentClass: # 在内部可以做什么事情 # 定义变量和韩式 name = "cici" age = 18 # 方法需加上self def print_file(self): print(f"名字是{self.name}") print(f"年龄是是{self.age}")
【类的执行】
类的实例化过程
调用类的方法# 在d2.py中的代码 from d1 import StudentClass # 实例化过程 student1 = StudentClass() # 调用类的方法 student1.print_file() 输出: 名字是cici 年龄是是18
(2) 浅谈函数与方法的区别
面向对象:设计、 封装
函数:面向过程
类的变量:数据成员
变量
(3) 类与对象
类:数据成员刻画类的特征,类能做的事情(行为)叫做方法。
类的特征的具体值,需要做实例化和传入具体值
可以通过类生成学生abcd,类是模板,可以产生很多对象# 模板 class StudentClass(): # 特征 name = "cici" age = 18 # 行为 def hace_class(self): print("上课")
实例化:类可以生成不同的对象,用模板生成不同的对象(id不同)class StudentClass: name = "cici" age = 18 def hace_class(self): print("上课") student1 = StudentClass() student2 = StudentClass() student3 = StudentClass() print(f"student123的id分别是:{id(student1)} ,{id(student2)} ,{id(student3)}") 输出: student123的id分别是:2238767201392 ,2238772106320 ,2238772375760
(4) 构造函数
向类传入不同的值,使得对象的特征不相同,需要定义__init__这个构造函数.
实例化的时候,会自动调用__init__方法进行初始化的过程,所以输出了student.
__init__也是可以调用的,然后输出student.class StudentClass: def __init__(self): # 构造函数 print("student") def hace_class(self): print("上课") student1 = StudentClass() student1.__init__() 输出: student student
__init__只能return None class StudentClass: def __init__(self): print("student") def hace_class(self): print("上课") student1 = StudentClass() a = student1.__init__() print(type(a)) 输出: student student
构造函数,让对象变得不同,必须传入对应的参数
__init__初始化对象的特征(属性)class StudentClass: name = "name" age = "age" def __init__(self, name, age): # name = name age = age print(f"student name : {name}, age: {age}") def hace_class(self): print("上课") student1 = StudentClass("cici", 18) student2 = StudentClass("daisy", 17) 输出: student name : cici, age: 18 student name : daisy, age: 17
(5) 区别模块变量与类中的变量
访问类下的对象和方法用点class StudentClass: name = "name" age = "age" def __init__(self, name, age): # name = name age = age print(f"student name : {name}, age: {age}") def hace_class(self): print("上课") student1 = StudentClass("cici", 18) student2 = StudentClass("daisy", 17) print(student1.name) 输出: student name : cici, age: 18 student name : daisy, age: 17 name
上面的代码中,name依旧是"name",说明我们传参未改变他原来的值。
类变量和实例变量 不同于 全局变量和局部变量。
使用self.name 保存实例变量的特征值。class StudentClass: name = "name" age = "age" def __init__(self, name, age): # 使用self.name 保存实例变量的特征值 self.name = name self.age = age def hace_class(self): print("上课") student1 = StudentClass("cici", 18) student2 = StudentClass("daisy", 17) print(student1.name) print(student2.name) print(StudentClass.name) 输出: cici daisy name
类变量不应该定义不同的变量,不同的特征应该是实例对象定义的。class StudentClass: school_sum = 100 def __init__(self, name, age): # 使用self.name 保存实例变量的特征值 self.name = name self.age = age def hace_class(self): print("上课") student1 = StudentClass("cici", 18) student2 = StudentClass("daisy", 17) print(student1.name) print(student2.name) print(StudentClass.school_sum)
(6) 类与对象的变量查找顺序
__dict__可以查看保存在对象下所有的变量class StudentClass: name = "name" age = "age" def __init__(self, name, age): # 使用self.name 保存实例变量的特征值 name = name age = age student1 = StudentClass("cici", 18) print(student1.__dict__) # __dict__保存对象下所有的变量 print(student1.name) print(StudentClass.name) 输出: {} name name class StudentClass: name = "name" age = "age" def __init__(self, name, age): # 使用self.name 保存实例变量的特征值 self.name = name self.age = age student1 = StudentClass("cici", 18) print(student1.__dict__) print(student1.name) print(StudentClass.name) 输出: {"name": "cici", "age": 18} cici name
查找顺序:实例变量-> 类变量 ->继承,父类里面去寻找class StudentClass: name = "name" age = "age" def __init__(self, name, age): name = name age = age student1 = StudentClass("cici", 18) print(student1.__dict__) print(student1.name) print(StudentClass.name) print(StudentClass.__dict__)
(7) self与实例方法
实例方法,第一个参数固定self,调用不需要对self传参。
self可以改成任何自定义的名字,建议用self。
self代表本身,谁调用了这个方法,self就是谁、self代表实例,一个对象。
实例变量和实例方法都是和对象实例相关联的。也是实例可以调用的。
(8) 在实例方法中访问实例变量与类变量
通过 self. 在实例方法里面访问实例变量 class StudentClass: school_sum = 100 def __init__(self, name, age): self.name = name self.age = age print(self.name) # 读取实例变量 print(self.__dict__) print(name) # 读取形参内容 # __init__ 是特殊的=的实例方法 print("通过 self. 在实例方法里面访问实例变量 : ", self.name) student1 = StudentClass("cici", 18) print(StudentClass.school_sum)
通过 self. 在实例方法里面访问类变量
通过 self.__class__. 在实例方法里面访问类变量
通过 类名. 在实例方法里面访问类变量class StudentClass: school_sum = 100 def __init__(self, name, age): self.name = name self.age = age def have_class(self): print(self.school_sum) print(self.__class__.school_sum) print(StudentClass.school_sum) student1 = StudentClass("cici", 18) student1.have_class()
(9) 类方法
实例方法操作类变量class StudentClass: school_sum = 100 def __init__(self, name, age): self.name = name self.age = age # 实例方法操作类变量 self.__class__.school_sum += 1 print(self.__class__.school_sum) student1 = StudentClass("cici", 18) student2 = StudentClass("cici", 18) student3 = StudentClass("cici", 18) student4 = StudentClass("cici", 18) 输出: 101 102 103 104
类方法定义:方法上加上 @classmethod
cls可以是自定义的名字
类方法不能调用实例变量class StudentClass: school_sum = 100 def __init__(self, name, age): self.name = name self.age = age @classmethod def add_school_sum(cls): cls.school_sum += 1 print(cls.school_sum) StudentClass.add_school_sum() StudentClass.add_school_sum() StudentClass.add_school_sum() StudentClass.add_school_sum() 输出: 101 102 103 104
实例方法关联的是对象,类方法关联的是类
(10) 静态方法
静态方法定义:方法上加上 @staticmethodclass StudentClass: school_sum = 100 def __init__(self, name, age): self.name = name self.age = age @staticmethod def add(): print("this is a static method") student1 = StudentClass("cici", 18) student1.add() StudentClass.add()
可以被对象和类调用,但是静态方法不能调用实例变量class StudentClass: school_sum = 100 def __init__(self, name, age): self.name = name self.age = age @staticmethod def add(): print(StudentClass.school_sum) print("this is a static method") student1 = StudentClass("cici", 18) student1.add() StudentClass.add()
马斯克据悉就430亿美元收购要约与推特管理人士会谈彭博4月25日消息,知情人士透露,马斯克周日与推特公司的管理人士会谈,这家社交媒体公司对马斯克的430亿美元收购要约变得更加接受。几天前,马斯克披露了他主动收购要约的融资计划,其中
2022年及以后的5项供应链预测国际电子商情讯,在最近的Gartner调查中,61的受访者表示技术是竞争优势的来源。许多人还将一些新兴技术确定为关键投资领域,其中20投资于机器人技术。Gartner副总裁分析师D
如果只能留下6个电脑上的软件,你会留下些什么?感谢题主提出此问题,看完此问题后我删了电脑30的软件。不过这问题真是很严峻啊,6个软件还真是不够。既然如此,那就说说六个电脑上我必用的软件吧一Chrome浏览器虽然说Win10自带
贵阳出了哪些名人?崇敬将军,追寻足迹,传承红色基因,今天介绍几位贵阳籍的解放军高级将领,他们也是当地的名人,他们是王炳文,贵州贵阳人,解放军少将军衔。1951年生,1969年从贵州入伍,曾任,任西藏
微信附近的人有哪些套路?相信,很多人,没有哪一个是没有玩过微信附近的人的于是,就有了套路的出现1。准备阶段会观察对方的头像照片兴趣爱好等个人资料,初步可以看出对方属于哪一种类型2。打招呼3。开始装逼,装神
菜鸟驿站取件不收费用,它靠什么盈利的?内行道出真相互联网的发展给人们带来了很大的便利,市场上的诸多行业都有网络,有着密不可分的关系,其中最具代表性的就是电商。如今的电商可谓是发展得如火如荼,并且其发展的前景一片光明,人们的生活也越
Git命令进阶操作日志格式化在本文中,我们会深入探讨如何对gitlog命令的输出进行格式化。大部分gitlog命令的可选项,可以帮你选择输出内容中包含每次提交的哪些信息。如果你不喜欢默认的gitlog输出格式
全球首台升降摄像头iPhone来了,苹果还不赶紧去进货?自从微软退出手机舞台,智能手机主要分为两个派系。一个是包罗万象开放自由的安卓,一个是封闭保守流畅安全的iPhone。可能是受系统影响,iPhone的许多设计也十分保守,刘海屏Fac
C多线程的进度条usingSystemusingSystem。Collections。GenericusingSystem。ComponentModelusingSystem。DatausingS
2022京东618将至持续打造晚8点APP也要改版了每经记者王郁彪每经编辑刘雪梅4月26日每经快讯,2022年京东618商家大会今日通过直播形式召开。每日经济新闻记者了解到,今年京东618将分为预售期开门红场景期高潮期四个时期,并将
国产5nm芯片要来了?!其实我们还是高兴太早缺芯少屏在很长时间内限制我国的科技发展,如今屏幕产线已经在中国全面落地,少屏的问题已经得到了很大缓解。但是缺芯的问题,依旧问题严重,尤其是国际环境的影响,以及电子产业在近两年来的快