析构函数
1 class My:#类 2 def __init__(self): 3 print('构造函数,类在实例化时,会自动执行它') 4 # self.client = pymongo.MongoClient(host='',port=27017) 5 def __del__(self):#析构函数,这个实例被销毁的时候自动执行 6 print('什么时候执行我呢') 7 # self.client.close()#自动关闭数据库和文件
析构函数在实例化后执行完所有程序会执行,但是可以选择在什么时候让它结束
m=My()
del m
私有的类和变量
1 class My:#类 2 3 def __say(self):#安全性更高 4 #函数名或变量名前面加__,这个函数或变量就是私有的,只能在类里面用,类外无法使用 5 print('3') 6 def cry(self):#带self实例方法 7 self.__say() 8 print('4')
私有防止多人写一个项目重复给一个变量赋值,导致原来的被覆盖
实例方法:
1 def cry(self):#带self是实例方法 2 self.__say() 3 print('4')
先实例化:m=My() 再调用:m.cry()
类方法:
1 @classmethod#装饰器,不改变原来的函数,给函数添加新功能 2 def eat(cls):#class 类方法 3 print(cls.country) 4 print('吃饭')
直接用类名调用:My.eat()
静态方法:
1 @staticmethod 2 def run(): 3 pass
直接用类名调用:My.run()
属性方法:
@property #属性方法 def red_pag(self): return 100 #调用时直接当做一个变量用,获取返回值
先实例化:m=My()
直接打印返回值:print(m.red_pag)
继 承
1 #继承的目的就是简化代码 2 import pymongo 3 class Ln: #父类 4 money = '2000' 5 def make_money(self): 6 print('挣钱') 7 class Me(Ln):#子类 8 9 pass 10 11 print(Me.money)#引用父类的类变量 12 nhy = Me()#实例化 13 nhy.make_money()#用父类的方法
结果:
子类继承后重写方法,会先在自己的类里找,再找父类,例子如下:
1 #继承的目的就是简化代码 2 import pymongo 3 class Ln: #父类 4 money = '2000' 5 def make_money(self): 6 print('挣钱') 7 class Me(Ln):#子类 8 def make_money(self):#方法已重写 9 10 print('挣更多钱') 11 print(Me.money) 12 nhy = Me() 13 nhy.make_money()
1 class Base:#基类 2 def __init__(self,ip,port): 3 self.ip=ip 4 self.port=port 5 class MongoDb(Base): 6 def __init__(self,ip,port):#直接重写方法会报错,因为方法名相同就只运行类里的这一个方法,而这个方法里没有ip和端口号 7 9 self.client = pymongo.MongoClient(host=self.ip, port=self.port)#放在构造函数里只执行一遍 10 def save(self,data): 11 self.client['db']['table'].insert(data)
m=MongoDb('ip',27017)
修改:
1 class Base:#基类 2 def __init__(self,ip,port): 3 self.ip=ip 4 self.port=port 5 class MongoDb(Base): 6 def __init__(self,ip,port):#直接重写方法会报错,因为方法名相同就只运行类里的这一个方法,而这个方法里没有ip和端口号 7 # Base.__init__(self,ip,port)#两种方法,这一句和下面那一句同样的作用,这样就可以获取到父类的方法 8 super().__init__(ip,port)#调用父类方法 9 self.client = pymongo.MongoClient(host=self.ip, port=self.port) 10 def save(self,data): 11 self.client['db']['table'].insert(data) 12 13 m=MongoDb('ip',27017) 14 m.save({'name':'zjr','msg':'好好学习'})
1 class My: 2 def say(self): 3 print('说话') 4 # m=My() 5 # m.say() 6 # My.say(m) 7 My().say()
#
My().say()
等同于
m=My()
m.say()
等同于
m=My()
My.say(m)
super用来寻找父类
1 class Base:#基类 2 def __init__(self,ip,port): 3 self.ip=ip 4 self.port=port 5 def play(self): 6 print('football') 7 class MongoDb(Base): 8 def __init__(self,ip,port):#直接重写方法会报错,因为方法名相同就只运行类里的这一个方法,而这个方法里没有ip和端口号 9 # Base.__init__(self,ip,port)#两种方法 10 super().__init__(ip,port)#调用父类方法 11 12 self.client = pymongo.MongoClient(host=self.ip, port=self.port) 13 def save(self,data): 14 self.client['db']['table'].insert(data) 15 def play(self): 16 super().play() 17 print('basketball') 18 19 m=MongoDb('ip',27017) 20 # m.save({'name':'zjr','msg':'好好学习'}) 21 m.play()