继承
继承?从你的长辈那里传承的东西
问题是: 在继承的时候继承了什么东西?
类的继承:
类中又什么?变量和方法
class son(father)
这甚至可以只写pass
但是如果father里方法要传参给对象变量
son()里也要传参
从object中可以继承很多__xxxx__的方法
例如__new__ 创建一个对象 __init__初始化一个对象
父类继承过了 子类就不用继承了
object 默认继承 不用写
def __add__(self, other)#self +other
__sub__减法
__mul__乘法
__truediv__除法
__le__ lt gt 小于大于小于等于
__len__
__str__
__dir__
__
【str和repr区别】
str 人类可读
repr 程序员可读
super (B,self)传 type, object-or-type
功能sefl确定继承顺序
B来确定搜索位置 ,从B之后开始
def _print_gender 往前面加下划线 隐私保护
别人. 的时候搞不出来
_xxx 约定 python中的私有变量
__xxx:后边不要写成__xxx__python保留的命名方法
__xxx:在解释器中的名称改写:定义__xxx的变量和方法,python会自动改名
改成 _ClassName__xxx:
eg。在父类中有个方法method1 打印123
子类中也有一个方法method 打印456
class Parent:
def _ _method1(self): #现在这个叫_Parent_ _method1()
print
class son(Parent):
def _ _method1(self)这个叫 _son_ _method1()
用的时候son._Parent_ _method1()
闭包
闭包特征:
1 嵌套函数
2 内层函数引用了外层函数的变量
3 内层函数作为返回值返回给外层函数
function . _ _code_ _.co_varnames看代码块里的变量
.co_
globals()返回一个字典,包含当前作用域的全局变量
locals()返回一个字典,包含当前作用域的局部变量也叫本地变量
nonlocal 变量名 定义一个自由变量
装饰器decorator
利用闭包的原理 搞一个装饰器
写一个闭包函数
@装饰器
def func()
类变量那个地方
自动(self)
想不用self
就
静态方法@staticmethod
类方法@classmethod
work
1.定义一个父类:
要求:包含三个对象变量,且其中一个对象变量使用_命名
定义一个方法:命名使用_ _命名
定义一个子类继承上边的父类:且定义一个和父类方法名相同的方法(__)
实例化子类的对象
访问带_的对象变量
访问父类中的_ _xxx方法
访问子类中的_ _xxx方法
class Father: def __print(self): print("father") def __init__(self, arg1, arg2, arg3): self.arg1 = arg1 self.arg2 = arg2 self._arg3 = arg3 class Son(Father): def __print(self): print("son") data = Son(1, 2, 3) data._Father__print() data._Son__print()
2.什么是闭包?
闭包的特征?
定义闭包,完成的功能为:传入一个数求和并输出
例如: 传入10 ->输出10
传入15 ->输出25
传入20 ->输出45
def sum_data(): result = [] def inner(value): result.append(value) print(sum(result)) return inner result = sum_data() result(10)
3.定义一个装饰器:打印函数运行花费的时间
你在执行之前获取一个时间
执行函数
在执行函数之后获取一个时间
去求时间差
time模块
import time def print_time(func): def inner(*args, **kwargs): old_time = time.time() result = func(*args, **kwargs) func_name = str(func).split(' ')[1] print('{} use time: {}s'.format(func_name, time.time() - old_time)) return result return inner @print_time def func(): time.sleep(3) func()
4.定义一个类:
要求:包含一个对象属性,且用_(单下划线)命名的
定义一个类方法(装饰器)
定义一个静态方法(装饰器)
定义委托属性(三个类装饰器): 可以访问_命名的属性的值
可以修改_命名的属性的值
可以删除_命名的属性
执行:
实例一个对象
调用类方法(类和对象两种方式)
调用静态方法(类和对象两种方式)
对象.委托属性
对象.委托属性 = value
del 对象.委托属性
class Computer: def __init__(self, brand, cpu, ram): self.brand = brand self.cpu = cpu self.ram = ram self._gpu = None @classmethod def class_method(cls): print("classmethod") @staticmethod def static_method(*args, **kwargs): print("staticmethod") @property def gpu_attr(self): return self._gpu @gpu_attr.setter def gpu_attr(self, value): self._gpu = value @gpu_attr.deleter def gpu_attr(self): del self._gpu rog = Computer("联想拯救者", "intel7 10875H", "16G") rog.class_method() rog.static_method() rog.gpu_attr = "RTX 2060" print(rog.gpu_attr) del rog.gpu_attr