个人笔记-Python3进阶

class类的关键字,class来声明类,类的名称首字母大写,多单词情况下每个单词首字母大写。
class Person(object):   # object为通用对象
    name = '小木'  # 类属性
    def dump(self):   # 类函数
        print(f"{self.name} is dumping")
xiaomu = Person()   # 类的实例化
print(xiaomu.name)  # 通过实例化进行属性调用
xiaomu.dump()   # 用过实例化进行函数调用
运行结果:
小木
小木 is dumping
类的self
self 是类函数中的必传参数,且必须放在第一个参数位置。
self 是一个对象,它代表实例化的变量自身。
self可以直接通过点来定义一个类变量。
self中的变量与含有self参数的函数可以在类中的任何一个函数内随意调用
非函数中定义的变量在定义的时候不用self。
一、python中self代表类的实例
self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
二、python中只有针对类来说self才有意义
python中的self,说的即是python类中的self。
三、self只能用在python类的方法中
四、具体举例说明
1、属性
(1)如果变量定义在类下面而不是类的方法下面,那这个变量既是类的属性也是类实例的属性。
class Cat:
    color = 'black'
    weight = '2kg'
cat = Cat()
print(cat.color)
print(cat.weight)
print(Cat.color)
print(Cat.weight)
运行结果:
black
2kg
black
2kg
(2)如果变量定义在类的方法下面,如果加了self,那这个变量就是类实例的属性,不是类的属性;如果没有加self,这个变量只是这个方法的局部变量,既不是类的属性也不是类实例的属性。
class Cat:
    def __init__(self):
        self.a = 1
        b = 2   # 如果没有加self,变量只是这个方法的局部变量
cat =Cat()
cat.a
cat.b
运行结果
Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/Python3Test/Test1.py", line 10, in <module>
    cat.b
AttributeError: 'Cat' object has no attribute 'b'
2、方法
(1) 如果在类中定义函数时加了self,那这个函数是类实例的方法,而不是类的方法。
class Cat:
    def eat(self):
        print('我爱吃鱼')
cat= Cat()
cat.eat()
Cat.eat()
运行结果
Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/Python3Test/Test1.py", line 9, in <module>
    Cat.eat()
TypeError: eat() missing 1 required positional argument: 'self'
我爱吃鱼
(2) 如果在类中定义函数时候没有加self,那这个函数就只是类的方法,而不是类实例的方法。
class Cat:
    def eat():
        print('我爱吃鱼')
cat= Cat()
cat.eat()
Cat.eat()
运行结果
Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/Python3Test/Test1.py", line 7, in <module>
    cat.eat()
TypeError: eat() takes 0 positional arguments but 1 was given
类的构造函数
类中的一种默认函数,用来将类实例化的同时,将参数传入类中
构造函数的创建及用法
class Test(object):
    def __init__(self, a):
        self.a = a
    def run(self):
        print(self.a)
        
t = Test(1)
t.run()
运行结果
1
对象的生命周期
_ _init_ _:对象生命的开始  内存中分配一个内存块
实例化...调用..操作..
_ _del_ _ : 删除对象   从内存中释放该内存块
def 函数不需要书写,默认存在于类中,自动清理内存
  1. python中的内存管家会按时清理内存,一般是当数据失去了它的名字,或者代码执行到了最后一行的时候,内存管家会清理掉内存。
  2. __del__这种两边都有下划线的函数叫作,内置函数,del函数在一定的时候会自动执行删除无用数据,这一点对我们来说是非常方便的。dir()函数可以查看对象的内置函数,继承object函数,可以继承很多的有用的内置函数。
私有函数与私有变量
class Person(object):
    def __init__(self,name):
        self.name = name
        self.__age = 33    # 私有函数
    
    def dump(self):
        print(self.name, self.__age)
        
    def __cry(self):    # 私有方法
        return 'I want cry'
无法被实例化对象调用。
类的内部可以调用私有函数和变量。
作用是只希望该函数只能在类中调用
使用方法:在前面加两个下划线_ _ 
强行调用方法:使用dir查看类中全部函数名,找到该私有函数名,就能调用。
python中封装的概念
将不对外的私有属性或方法通过可对外使用的函数而使用(类中定义私有的,只有类内部使用,外部无法访问)
这样做主要原因:保护隐私,明确区分内外
封装例子:
class Parent(object):
    def __hello(selfs,data):    #私有函数,包含不想被使用者调用的功能
        print('hello %s' % data)
    def helloworld(self):   # 这就是中间的桥梁,完成对私有函数的引用
        self.__hello('world')
if __name__ =='__main__':
    p = Parent()
    p.helloworld()
装饰器
什么是装饰器:
也是一种函数,可以接受函数作为参数,可以返回函数,接收一个函数,内部对其处理,然后返回一个新函数,动态的增强函数功能。
将C函数在a函数中执行,在a函数中可以选择执行或不执行c函数,也可以对c函数的结果进行二次加工处理。
def out(func_args):     # 外围函数
    def inter(*args, **kwargs):     # 内嵌函数
        return func_args(*args, **kwargs)
    return inter    # 外围函数返回内嵌函数
装饰器的用法
# 测算面积后格式化
def format_(fun):
   def b(*args, **kwargs):
       res = fun(*args, **kwargs)
       return f'面积为{res}平方米'
   return b
# 测算正方形面积
@format_
def sq(a, b):
   return a * b
# 测算三角形面积
@format_
def sj(a, h):
   return a * h / 2
print(sq(2, 2))
print(sj(2, 1))
类的常用装饰器
classmethod、staticmethod、property
classmethod的功能:将类函数可以不经过实例化而直接被调用
class Test(object):
    @classmethod
    def add(cls, a, b):  # cls替代普通类函数中的self,变为cls,代表当前操作的是类
        return print(a+b)
Test.add(1,2)   # 直接调用
staticmethod的功能:将类函数可以不经过实例化而直接被调用,该装饰器调用的函数不许传递self或cls参数,且无法再该函数内调用其他类函数或类变量
class Test(object):
    @staticmethod
    def add(a, b):
        return a+b
# 注意在该函数内无法调用其他类函数或者类变量
print(Test.add(1,2))
property的功能:将类函数的执行免去括弧,类似于调用属
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值