Python Day04

面向对象编程

一、基础

  1. 面向对象思想三大要素:封装、继承、多态。
  2. 类和对象:类是对象的蓝图和模板,而对象是类的实例。类是抽象的概念,而对象是具体的东西。在面向对象编程的世界中,一切皆为对象,对象都有属性和行为,每个对象都是独一无二的,而且对象一定属于某个类(型)。
  3. 定义类:
class Class_name(object):
	def __init__(self):
		self.a = 1000
	def A(self):
		print(self.a)
		print('ynn nyy yny')

if __name__ == "__main__":
	ynn = class_name()   #就相当于走了初始化__init__
	ynn.A()		#在类中调用需要使用‘.’
	print(ynn.a)

运行结果:1000
		ynn nyy yny
		1000
	#打印下载进度100%
		import time
		class jindu(object):
		    def __init__(self):
		        self.a = 1
		        
		    def A(self):
		        for i in range(0,100):
		            time.sleep(0.5)
		            if i % 5 == 0:
		                res = "*"*self.a
		                print('%s %d%%'%(res,(i+5)))
		                self.a += 1
		
		
		if __name__ == "__main__":
		    ningning = jindu()
		    ningning.A()
运行结果:
 1. 5%
** 10%
*** 15%
**** 20%
***** 25%
****** 30%
******* 35%
******** 40%
********* 45%
********** 50%
*********** 55%
************ 60%
************* 65%
************** 70%
*************** 75%
**************** 80%
***************** 85%
****************** 90%
******************* 95%
******************** 100%
#判断文件中大写字母的个数
		class title(object):
		    def __init__(self,path):
		        self.path = path
		        self.count = 0
		    def wenjian(self):
		        with open(self.path,'r',encoding = 'utf8') as f:
		            res = f.readlines()
		            for da in res:
		                for i in da:
		                    if i.isupper():
		                        self.count += 1
		            print("文件中大写字母有{}个".format(self.count))
		        
		if __name__ == "__main__":
		    path = 'C:/Users/Asus/Desktop/tt.txt'
		    dee = title(path)
		    dee.wenjian()
		    
运行结果:文件中大写字母有10
  1. 访问可见性问题:属性和方法的访问权限只有两种(公开的和私有的)如果希望属性是私有的,在给属性命名时可以用两个下划线作为开头。
		eg1:
			class class_name:
			    def __init__(self):
			        self._a = 100
			
			    def A(self):
			        print(self._a)
			        print(self.B())
			
			    def _B(self):
			        print('Hello B')
			
			if __name__ == "__main__":
			    name = class_name()
			    #name.A()
			    #print(name.__a)# 私有变量不可外部调用
			    #print(name.__B())
			
			    print(name._a)
运行结果:
	100
	说明:私有变量和私有函数都不可外部调用

二、进阶

  1. @property装饰器
    之前将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问。
    如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作。如果要做到这点,就可以考虑使用@property包装器来包装getter和setter方法,使得对属性的访问既安全又方便。
		eg1:
			class lala(object):
			    def __init__(self):
			        self.__a = 100
			
			    @property
			    def look(self):
			        print(self.__a)
			
			if __name__ == "__main__":
			    name = lala()
			    #name.look()
			    name.look # 函数变成了一个属性self.look
运行结果:
	100

		eg2:
			class lala(object):
			    def __init__(self):
			        self.__a = 100
			
			    @property
			    def a(self):
			        return self.__a
			
			    @a.setter#修改器的名字需要和访问器的名字一样
			    def a(self,new_num):
			        self.__a = new_num
			
			if __name__ == "__main__":
			    ynn = lala()
			    ynn._lala__a = 10000
			    print(ynn._lala__a)
运行结果:
	10000
  1. 类的动态绑定
		eg1:
			class lala(object):
			    def __init__(self):
			        self.__a = 100
			
			    @property
			    def a(self):
			        return self.__a
			
			    @a.setter
			    def a(self,new_num):
			        self.__a = new_num
			
			if __name__ == "__main__":
			    ynn = lala()
			    ynn.a = 2000
			    print(ynn.a)
			    #类的动态绑定
			    ynn.b = 5000
			    print(ynn.b)
运行结果:
	2000
	5000
  1. 静态方法和类方法都是通过给类发消息来调用的
		eg1:
			class lala_(object):
			    def __init__(self):
			        self.__a = 100
			
			    @staticmethod
			    def A():
			        print("lalala")
			
			if __name__ == "__main__":
			    ynn = lala_()
			    ynn.A
			    ynn.b = 5200
			    print(ynn.b)
运行结果:
	5200
  1. 继承和多态:可以在已有类的基础上创建新类,做法就是让一个类从另一个类那里将属性和方法直接继承下来,从而减少重复代码的编写。
			class A(object):
			    def __init__(self,a1):
			        self.a = 100
			        self.a1 = a1
			
			    def A1(self):
			        print("A1")
			
			class B(A):
			    def __init__(self,a1):
			        A.__init__(self,a1)
			        pass
			    def B1(self):
			        print(self.a1)
			
			if __name__ == "__main__":
			    ynn = B("lala")
			    ynn.B1()
运行结果:
	lala
	说明:私有变量和私有函数不可以被继承
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值