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

  • 相关阅读:
    Jmeter学习总结
    WABAPI使用
    EF 学习笔记
    WCF学习笔记
    MVC学习笔记
    IIS使用问题
    CSS学习笔记
    Rotate Image
    Two Sum
    野指针及c++指针使用注意点
  • 原文地址:https://www.cnblogs.com/Mezhou/p/9392424.html
Copyright © 2020-2023  润新知