python-类的各种方法

析构函数

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()

原文地址:https://www.cnblogs.com/Mezhou/p/9392424.html