Python入门之路(14)

Python 入门之路 (14)

属性和方法

• 属性
• 类属性,直接在类中定义的属性是类属性
• 类属性可以通过类或类的实例访问到。但是类属性只能通过类对象来修改,无法通过实例对象修改
• 实例属性 通过实例对象添加的属性属于实例属性
• 实例属性只能通过实例对象来访问和修改,类对象无法访问修改

• 方法
• 在类中定义,以self为第一个参数的方法都是实例方法
• 实例方法在调用时,Python会将调用对象以self传入
• 实例方法可以通过类实例和类去调用
• 当通过实例调用时,会自动将当前调用对象作为self传入
• 当通过类调用时,不会自动传递self,我们必须手动传递self
• 类方法 在类的内容以@classmethod 来修饰的方法属性类方法
• 类方法第一个参数是cls 也会自动被传递。cls就是当前的类对象
• 类方法和实例方法的区别,实例方法的第一个参数是self,类方法的第一个参数是cls
• 类方法可以通过类去调用,也可以通过实例调用

• 静态方法
• 在类中用@staticmethod来修饰的方法属于静态方法
• 静态方法不需要指定任何的默认参数,静态方法可以通过类和实例调用
• 静态方法,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数
• 静态方法一般都是些工具方法,和当前类无关

class A:
    # 类属性 直接在类中定义的属性
    # 类属性只能通过类对象修改,无法通过实例对象来修改
    count = 0
    def __init__(self):
        # 实例属性 是通过实例对象添加的属性
        # 实例属性只能通过实例对象来访问和修改,类对象无法访问和修改
        self.name = '葫芦娃'
    # 实例方法 在类中定义,以self为第一个参数的方法都是实例方法
    def test(self):
        print('这是test方法...')
    # 类方法 类方法和实例方法的区别,实例方法的第一个参数是self,类方法的第一个参数是cls
    # 类方法第一个参数是cls 也会自动被传递。cls就是当前的类对象
    # 类方法以@classmethod 来修饰的方法
    # 类方法可以通过类调用,也可以通过实例调用
    @classmethod
    def test2(cls):
        print('这是test方法,它是一个类方法')
        print(cls.count)
    
    # 静态方法 基本上都是一个与本类无关的方法,用@staticmethod来修饰的方法属于静态方法
    # 静态方法不需要指定任何的默认参数,静态方法可以通过类和实例调用
    # 静态方法一般都是些工具方法,和当前类无关
    @staticmethod
    def test3():
        print('是test方法,它是一个静态方法')
        
a = A()
# 实例属性,通过实例对象添加的属性称为实例属性
a.count = 20
print(A.count) # 0
print(a.count) # 20

print(‘A’,A.name)
print('a',a.name)

a.test()
A.test(a) # 用类对象去调用实例方法,需要传递实例化对象,否则不知道找哪个实例的方法

A.test2()
a.test2()

模块

模块化将一个完整的程序分成一个个小模块
通过模块组合搭建一个完整的程序
模块化的优点;

  1. 方便开发
  2. 方便维护
  3. 模块复用

模块的创建

在Python当中一个py文件就是一个模块

在一个模块中引入外部模块,可以引入同一个模块多次,但是模块的实例只会执行一次

  1. import 模块名
    模块名就是Python的文件名
  2. import 模块名 as 模块别名
    在一个模块内部都有一个__name__,通过print(name)可以获取模块的名字(不在主文件中运行);
    如果print(name)在py文件直接运行时,那么__name__默认等于字符串’main’。__name__属性值为__main__的模块是主模块。一个程序中只有一个主模块

模块的使用

访问模块中的变量–>模块名.变量名
访问模块中的函数–>模块名.函数名
访问模块中的对象–>模块名.对象名

我们也可以引入模块中部分内容
from 模块名 import 变量,变量…
还有一种引入方式
from 模块名 import 变量 as 别名

列表推导式

旧的列表 —> 新的列表
语法:
[表达式 for 变量 in 旧的列表]
[表达式 for 变量 in 旧的列表 if 条件]

# 找到长度大于3的人名
lst = ['jerry','tony','tom','mok','abcd']
def fn(lst):
   new_lst = []
   for name in lst:
       if len(name) > 3:
           new_lst.append(name)
# 找到长度大于3的人名
lst = ['jerry','tony','tom','mok','abcd']
r = [name.capitalize() for name in lst if len(name)>3]
print(r)
# 1-100能被3整除的列表
new_lst = [n for n in range(1,101) if i %3 ==0]
print(new_lst)

生成器

有一种一边循环一边计算的机制,称为生成器
创建生成器的方法

  1. 通过列表推导式
# 需求: 得到一个0-10之间的数,并和3相差的列表
# new_lst = [i * 3 for i in range(10)]
# print(new_lst)
g = (i * 3 for i in range(10))
print(type(g)) # <class 'generator'> 
print(g) # <generator object g at ox---->
# 方式一 __next__() 获得元素
print(g.__next__()) # 0
print(g.__next__()) # 3
# 方式二 next()函数 获取元素
print(next(g)) # 6
print(next(g)) # 9
print(next(g)) # 12
print(next(g)) # 15
# 当所有元素均生成后继续再调用会报错
  1. 通过函数来完成
    只要在函数中添加yield关键字,该函数就会变成一个生成器
    a. 定义一个函数,函数中使用yield关键字
    b. 调用函数,接收调用结果
    c. 得到的结果就是一个生成器
    d. 通过next()和__next__()就可以获取生成器的元素
def fn():
    n = 0
    while True:
        n += 1
        yield n
n = fn()
print(n) # <generator object g at ox---->
print(next(n)) # 1
print(next(n)) # 2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值