python类与对象&魔法方法&模块思想学习笔记

暑假开始了!准备好好学习python,打算先把基础课程过一遍。

1.类与对象

类初始化时名字一般首字母大写
类初始化实例:(利用__init__函数)
在这里插入图片描述
当传入参数数目不确定时,用*来表示(在函数与类中都是这样)

例题:
定义一个类,当实例化该类的时候,自动判断传入了多少个参数,并显示出来:

>>> class A:
	def __init__(self,*args):
		length=len(args)
		if length==0:
			print("没有传入参数")
		else:
			print("传入了 %d 个参数,分别是"%length,end=' ')
			for each in args:
				print(each,end=' ')

利用*args来表示传入多个参数的可能,注意__init__函数在设置参数时为(self,…),同时利用了格式化输出。

在定义类的成员时,如果成员名以两个下划线或更多下划线开头而不以两个或更多下划线结束则表示是私有成员。
在这里插入图片描述
私有成员访问方式要与普通成员有所不同
类的内部可以直接访问,而外部不可以
如果要访问私有成员:在类名前加_
在这里插入图片描述
继承——便于代码复用:
方法:子类名(父类名)

多态:
在这里插入图片描述

2.魔法方法

利用魔法方法,我们可以实现对运算符的重载操作(即赋予新意义)
例题:
定义一个单词(Word)类重写比较操作符(参考自学:Python 魔法方法详解),当两个 Word 类对象进行比较时,根据单词的长度来进行比较大小。

编写代码之前,我们首先需要查阅希望修改的运算符所对应的函数名,再在类的定义里

class word:
    def __init__(self,words):
        self.w=words
    def __lt__(self,other):
        return len(self.w)<len(other.w)
    
    def __le__(self,other):
        return len(self.w)>len(other.w)

    def __eq__(self,other):
        return len(self.w)==len(other.w)

>>> w1=word('just')
>>> w2=word('try')
>>> w1>w2
True

3.迭代器、生成器

参考资料:

实际用例:

>>> def get(number):
	while True:
		if number>100:
			break
		if is_prime(number):
			yield number
		number+=1

>>> a=get(1)
>>> for each in a:
	print(each,end=' ')

	
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

4.模块思想

三种导入模块的方法:

  1. import 模块名 as 新的模块名

  2. from 模块名 import 模块元素

  3. from 模块名 import *

导入模块时,要确保模块的存储路径包含于python 搜索路径,因此,问题变为如何获得python的搜索路径

import sys
print(sys.path)

在这里插入图片描述
我们可以很清楚的看到,sys.path是一个列表,因此当模块的路径不在sys.path中时,我们可以对其使用列表的append方法来增加搜索路径。
同时,也可以把模块文件直接移动到已有的搜索路径中。

自己创建一个包的方法:

  1. 新建一个文件夹
  2. 创建一个名为__init__.py的文件(可以为空)
  3. 相关的模块文件放入文件夹中

包名---->文件夹名 模块名---->模块文件的名字

__name__属性的含义:
作为独立程序时:__name__与__main__含义相同
作为模块被引入时,__name__即为模块名

应用实例:
对于下面这段代码,不管是运行a还是b都会报错


# a.py
import b
 
def x():
    print('x')
 
b.y()
 
# b.py
import a
 
def y():
    print('y')
 
a.x()

解决方法:

# a.py
import b
def x():
    print('x')
if __name__ == '__main__':
    b.y()
     
# b.py
import a
def y():
    print('y')
if __name__ == '__main__':
    a.x()

利用:if name == ‘main’:
使得两者之间主次分明,从而避免了上面的报错的情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值