继承
继承?从你的长辈那里传承的东西
问题是: 在继承的时候继承了什么东西?
类的继承:
类中又什么?变量和方法
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