目录
1. GIL(全局解释器锁)
2. 深拷贝和浅拷贝
3. 私有化
4. import 导入模块
4.1方法:
4.2 拓展: 调用函数时根据搜索路径列表的先后顺序调用的。
4.3 多模块开发import导入注意点:
5. 封装,继承,多态——面对对象编程
6. 多继承与__mro__ 方法
7. *args()-元组参数,**kwarg-字典参数
8. 类与属性
8.1 类属性;类方法
8.2 类方法;实例方法
8.3 静态方法
9. @property 属性
9.1 基础
9.2 装饰器使用方法
9.3 使用类属性方式实现
10. 魔法属性
10.1 __doc__
10.2 __module__和__class__
10.3 __init__
10.4 __del__
10.5 __call__
10.6 __dic__
10.7 __str__
注意:
应用: 深拷贝使用拷贝内容时不会影响原数据;浅拷贝使用拷贝数据时会影响原数据。
__xx
: 在类中是私有属性方法,子类不能继承。__xx__
: 魔法方法,内置方法。子类可以继承__xx
: 在导入模块时禁止导入。import
导入模块from xx import yy
import xx
from xx import *
import xx, zzz
from xx import yy, mm
import xx as yy
:起别名,避免变量重复 查看搜索路径:
import sys
sys.path()
在当前函数下可以查看函数搜索路径,函数会根据搜索列表的先后性依次查找需要调用函数模块的路径。
sys.path.append(路径) # 最后增加
sys.path.inser(0, 路径) # 插入想要的路径
from xxx import reload
import yy
from xx import yy
两种方法导入模块的不同点: 在使用xx函数模块中yy函数,若yy = True (进行了赋值。)
第一种导入方式,指向yy模块中函数xx这个函数。
第二种导入方式,指向True这个值。
结果: 在主函数修改值时,1会成功,2会失败。
__mro__
方法拓展:
__mro__方法:
类名.__mro__
继承父类的写法:
父类名.__init__(self, 参数)
super.__init__(参数)
super.(父类名.self).__init__(参数)
说明:
1.第一种继承父类写法,好处在于简介,缺点是:当d类继承b类,c类,b,c 类继承a类,d类会重复继承a。
2. 第二种会按照类的继承顺序继承不会导致重复调用。
2. 第三种,可以指定调用的父类名,根据继承顺序调用。
*args()-元组参数,**kwarg-字典参数
*
的目的在于告诉服务器特殊对待。args
与kwarg
数据保持原本传输的时候需要解包,要使用*args,**kwarg
类属性: 类创建的属性,只在内存空间中保存一份,共享给所有对象,并且在实例对象储存空间中都会保存。
类方法: 实例对象独有的,不会共享给其他类与其他对象。保存在自己内存空间中。
类方法: 类自己调用,至少传入一个cls
参数(可以传入参数)。并且有装饰器:@classmathod
实例方法: 由对象调用,中至少传入self
参数,执行时自动将类创建的给对象传给self
静态方法: 由类调用,没有默认参数。@staticmethod
@property
属性作用: 在类中返回属性值
注意点:
两种用法 :
@property
class Goods(object):
def __init__(self):
# 原价
self.original_price = 100
# 折扣
self.discount = 0.8
@property
def price(self):
new_price = self.original_price * self.discount
return new_price
@price.setter
def price(self, value):
self.original_price = value
@price.deleter
def price(self):
del self.original_price
obj = Goods()
print(obj.price)
obj.price = 200
print(obj.price)
del obj.price
@property
——取值(获取)@xxx.setter
——设置值(修改)@xxx.deleter
——删除值注意: 设置要传入新值的参数
@price.setter
def price(self, value):
self.original_price = value
class Fll(object):
def get_bar(self):
return 'laowang'
def set_bar(self, value):
"""必须两个参数"""
return 'set value' + value
def del_bar(self):
return 'laowang'
BAR = property(get_bar, set_bar, del_bar)
obj = Fll()
result = obj.BAR
print(result)
property方法中有是个参数
调用对象.属性 = xxx
时自动触发执行。del对象.属性
时自动触发执行对象.属性.__doc__
,此参数是该属性的描述信息。具有特殊含义的属性
__doc__
class Fll(object):
"""描述信息"""
def sun(self):
pass
# 输出描述信息
print(Fll.__doc__)
__module__
和__class__
__moudle__
表示操作对象在那个类__class__
表示当前操作对象的类是什么from test import Person
obj = Person()
print(obj.__module__)
print(obj.__class__)
__init__
__del__
__call__
注: __init__
方法执行时是类创建对象触发的。而__call__
触发是由对象名加()触发的。eg:对象()
class Foo:
def __init__(self):
pass
def __call__(self, *args, **kwargs):
print('__call__')
obj = Foo() # 执行 __init__
obj() # 执行 __call__
__dic__
class Province(object):
country = 'China'
def __init__(self, name, count):
self.name = name
self.count = count
def func(self, *args, **kwargs):
print('func')
# 获取类的属性,即:类属性、方法、
print(Province.__dict__)
# 输出:{'__dict__': , '__module__': '__main__', 'country': 'China', '__doc__': None, '__weakref__': , 'func': , '__init__': }
obj1 = Province('山东', 10000)
print(obj1.__dict__)
# 获取 对象obj1 的属性
# 输出:{'count': 10000, 'name': '山东'}
obj2 = Province('山西', 20000)
print(obj2.__dict__)
# 获取 对象obj1 的属性
# 输出:{'count': 20000, 'name': '山西'}
__str__
在打印对象名时,输出__str__
的返回值。
class Foo:
def __str__(self):
return 'laowang'
obj = Foo()
print(obj)
# 输出:laowang
以上转载于:https://www.zhihu.com/question/357357801/answer/2712220871
Python好课分享,有帮助的可以收藏起来慢慢学:
python大数据方向
2022最新大数据Hadoop入门视频教程,最适合零基础自学的大数据Hadoop教程
2022年大数据spark3.2入门Spark全套视频教程,4天spark3.2快速入门到精通,全网首套基于Python语言的spark教程
2022年MySQL基础入门2022最新MySQL知识精讲+mysql实战案例_零基础mysql数据库入门到高级全套教程
Python+大数据开发
MySQL数据库:2022最新MySQL知识精讲+mysql实战案例_零基础mysql数据库入门到高级全套教程
Hadoop入门:2022最新大数据Hadoop入门视频教程,最适合零基础自学的大数据Hadoop教程
Hive数仓项目:大数据项目实战教程_大数据企业级离线数据仓库,在线教育项目实战(Hive数仓项目完整流程)
PB内存计算
Python入门:全套Python教程_Python基础入门视频教程,零基础小白自学Python必备教程
Python编程进阶:Python高级语法进阶教程_python多任务及网络编程,从零搭建网站全套教程
spark3.2从基础到精通:Spark全套视频教程,4天spark3.2快速入门到精通,全网首套基于Python语言的spark教程
Hive+Spark离线数仓工业项目实战:全网首次披露大数据Spark离线数仓工业项目实战,Hive+Spark构建企业级大数据平台