Python是一门向对象的语言,万物皆对象;
1、对象的特性是:属性和方法,python通过类来定义对象的属性和方法
#定义类;
class Person: #定义经典类
class Person(object): #定义新式类
def __init__(self,name,sex):
self.name = name #属性
self.sex = sex
def cry(self): #方法
print(‘%s cry....‘%self.name)
def eat(self):
print(‘color‘,self.sex)
ccx = Person(‘常彩霞‘,‘女‘,‘黑色‘) #创建对象,即类的实例化
ccx.eat() #访问对象的方法
2、self参数
self 参数是对类的当前实例的引用,用于访问属于该类的变量
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def myfunc(abc):
print("Hello my name is " + self.name)
p1 = Person("Bill", 63)
3、__init__,构造函数;__del__析构函数
class Foo:
def __init__(self):
print(‘构造方法被调用‘) #初始化方法,创建完对象后会自动被调用
def __del__(self):
print(‘脚本运行结束, 释放内存‘) #析构方法,当对象被删除时,会自动被调用,然后释放内存
4、实例方法、类方法和静态方法
class straff: nation = ‘china‘ #类变量 def __init__(self,name,position,salary): #实例方法,必须带self self.name = name #实例变量、成员变量 self.position = position self.salary = salary @classmethod #装饰器、可以视为一个函数 def help(cls): #类方法、cls就是类straff,一些公共的方法,就用类方法,类方法里面不能调用实例方法,不能调用实例变量 print(cls.nation) cls.show() def myself(self): #实例方法 self.help() #实例方法可以调用类方法 print(self.nation) #实例方法可以调用类变量 print(self.name) self.show() # 静态方法,可以看成一个单纯的函数,和类本身没有关系,不能使用类或实例的任何属性和方法;类对象或实例对象都可以调用它 @staticmethod def show(): #静态方法可以不带参数 print(‘静态方法‘)
5、继承
class Car:
__key = ‘value‘ #私有的变量和方法不能被继承 def __init__(self,wheel,direction): self.wheel = wheel self.direction = direction def run(self): print(‘向着 %s 前进 %s‘ %(self.direction,self.wheel)) class Bmw(Car): #继承 pass bmw = Bmw(4,‘north‘) #实例化 bmw.run() #调用父类的方法 print(bmw.wheel) #调用父类的属性
6、重写父类的方法
class Car: def __init__(self,wheel,direction): self.wheel = wheel self.direction = direction def run(self): print(‘向着 %s 前进 %s‘ %(self.direction,self.wheel)) class Bmw(Car): def run(self): #覆盖重写父类的方法,父类的方法不会被调用 print(‘重写父类的方法‘) def run(self): super().run() #在父类的方法基础上修改 print(‘重写父类的方法‘)
7、重写构造方法
class Car: def __init__(self,wheel,direction): self.wheel = wheel self.direction = direction def run(self): print(‘向着 %s 前进 %s‘ %(self.direction,self.wheel)) class Bmw(Car): #继承 def __init__(self,name,color): #重写了__init__ 时,实例化子类,就不会调用父类已经定义的 __init__ self.name = name self.clor = color def __init__(self,name,color): super(Bmw,self).__init__(name,color) #重写__init__,同时保留父类的构造方法 self.name = name self.color = color def run(self): super().run() print(‘向着 %s 前进 %s‘ %(self.name,self.color))
8、多重继承:一个子类可以同时获得多个父类的所有功能
class(A,B)#如果父类的方法重复,取前面的一个
9、多线程
线程:是一个程序,资源的集合,进程是在线程里面的,一个程序执行的最小单位
import threading import time def insert_db(): #定义一个线程函数 time.sleep(3) print(‘insert_over‘) threads = [] start_time = time.time() for i in range(3): t = threading.Thread(target=insert_db) # 创建3个线程,target指定线程执行的函数名 ## t = threading.Thread(target=run,args=(‘t1‘,)) args是函数对应的参数,以元组的形式存在 t.start() #启动线程 threads.append(t) #1线程执行完后自动结束,判断线程是否全部结束 for t in threads: t.join() # 告诉主线程,等子线程完成之后再执行 #2也可以判断线程数 while threading.activeCount() != 1: pass end_time = time.time() print(‘多线程执行的时间‘,end_time - start_time) print(‘全部结束‘)
10、线程锁
由于线程之间是进行随机调度的,如果有多个线程同时操作一个对象,如果没有很好地保护该对象,会造成程序结果的不可预期, 我们因此也称为“线程不安全”。
为了防止上面情况的发生,就出现了互斥锁(Lock)
import threading count = 0 lock = threading.Lock() def func(): global count print(‘test-lock‘) lock.acquire() #加锁 count += 1 lock.release() #释放锁 for i in range(3): t = threading.Thread(target=func) t.start()
11、守护线程
设置为守护线程、一旦主线程结束,那么守护线程不管有没有执行完成,全部结束
import threading import time def talk(name): print(‘正在和%s聊天‘%name) time.sleep(200) def shipin(name): print(‘正在和%s视频‘%name) time.sleep(300) print("qq主窗口") t1 = threading.Thread(target=talk,args=[‘刘小燕‘]) t1.setDaemon(True) #设置线程为守护线程 t1.start() t2 = threading.Thread(target=shipin,args=[‘蔡明昌‘]) t2.setDaemon(True) #设置线程为守护线程 t2.start() time.sleep(5) print(‘结束。。。‘)
原文:https://www.cnblogs.com/whcp855/p/13129495.html