• python-类


    1、类

    #新式类(后面会跟一个参数,用于单继承或者多继承的父类)
    class MyNewObject(object):
        pass#pass表示不执行任何操作但是在语法上需要一行语句
    
    #经典类(没有继承任何其他父类)
    class MyNewObject:
        pass

    2、类的实例化(实例对象的独有属性)

    #类的实例化(函数调用的形式)
    if __name__ == '__main__':
        myFirstObject = MyNewObject1()
        #实例对象的属性,而非类的属性
        #对于实例对象的独有属性实质上是动态的
        #这里只是借用了类的名称空间而已
        myFirstObject.x = 1
        myFirstObject.y = 2
        result = myFirstObject.x + myFirstObject.y
        print(result)

    3、类的方法

    调用方法的途径:
    1、定义类和fangfa
    2、实例化对象
    3、通过实例调用方法

    #类的方法
    class MyClassWithMethod(object):
        #对于类中的方法都有self参数,这个参数代表实例对象本身
        #调用的时候不用传递
        def printFoo(self):
            print("you invoked printFoo")
    
    if __name__ == '__main__':
         MyObj =  MyClassWithMethod()
         #self参数不用传递
         MyObj.printFoo()

    4、类的实例化(定义构造器方法)

    class student(object):
        #实例化对象的时候对init是一种隐式的调用
        def __init__(self,n,a):
            self.name = n
            self.age = a
            print("实例化对象",self.name)
        def update(self,a):
            self.age = a
            print("修改方法:",self.name)
    
    if __name__ == '__main__':
        #自动调用init方法
        s1 = student('tom',12)
        s2 = student('jerry',34)
        print(s1.name)
        print(s1.age)
        #调用update
        s1.update(23)
        print(s1.age)
    '''实例化对象 tom
    实例化对象 jerry
    tom
    12
    修改方法: tom
    23
    '''

    5、使用子类

    #定义student的子类
    class student_1(student):
        def __init__(self,name,age,phone):
            #调用父类的构造方法
            student.__init__(self,name,age)
            #添加父类没有的属性方法
            self.phone = phone
        def updatePhone(self,phone):
            self.phone = phone
    if __name__ == '__main__':
        ss1 = student_1('cr',13,12345)
        print(ss1.phone)
        ss1.updatePhone(111)
        print(ss1.phone)
    实例化对象 cr
    12345
    111
    

    6、类的数据属性

    #类的数据属性(相当于静态变量,属于类,可以直接通过类访问,不用实例化)
    #与类进行绑定,不依赖任何实例
    class Object1(object):
        foo = 100
    
    if __name__ == '__main__':
        print(Object1.foo)
        Object1.foo  +=1
        print(Object1.foo)
    '''100
    101'''

    7、类中的方法都要通过实例对象来调用,否则都会调用失败,

    8、查看类的属性方法

    #查看类的属性方法
    class Object1(object):
        foo = 100
        def __init__(self,a,b):
            self.a = a
            self.b = b
        def fun1(self,c):
            self.b = c
    if __name__ == '__main__':
        l = dir(Object1)
        print(l)
        '''['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'foo', 'fun1']
    '''
        dict = Object1.__dict__
        print(dict)
        '''{'__module__': '__main__', 'foo': 100, '__init__': <function Object1.__init__ at 0x0000024ADCDD4840>, 'fun1': <function Object1.fun1 at 0x0000024ADCDD48C8>, '__dict__': <attribute '__dict__' of 'Object1' objects>, '__weakref__': <attribute '__weakref__' of 'Object1' objects>, '__doc__': None}
    '''
    

    9、解构器的使用(当实例化对象的引用次数为0的时候,清除该对象)

    class P(object):
        def __del__(self):
            pass
    
    
    
    class C(P):
        def __init__(self):
            print("实例化对象")
        def __del__(self):
            P.__del__(self)
            print("删除构造器")
    
    
    if __name__ == '__main__':
        c1 = C()
        print(id(c1))
        c2 = c1
        print(id(c2))
        c3 = c1
        print(id(c3))
        del c1
        print("==")
        del c2
        print("==")
        del c3
        print("==")
    
    
    '''
    实例化对象
    2759825420752
    2759825420752
    2759825420752
    ==
    ==
    删除构造器
    ==
    
    
    '''
    

    10、使用默认参数构建构造器(实例化对象的时候,默认参数可以修改)

    class HotelRoomCalc(object):
        def __init__(self,rt,sales=0.085,rm=0.1):
            self.salesTax = sales;
            self.roomTax = rm
            self.roomRate = rt
    
        def calcTotal(self,days = 1):
            daily = round((self.roomRate*(1+self.roomTax+self.salesTax)),2)
            return float(days)*daily
    
    if __name__ == '__main__':
        #创建实例
        c1 = HotelRoomCalc(299)
        #日租金
        total = c1.calcTotal()
        print(total)
        #两天的租金
        total_2 = c1.calcTotal(2)
        print(total_2)
        #新创建的实例,修改默认参数
        c2 = HotelRoomCalc(189,0.086,0.058)
        totalDaily = c2.calcTotal()
        print(totalDaily)
        totalDaily2 = c2.calcTotal(2)
        print(totalDaily2)
    '''
    354.31
    708.62
    216.22
    432.44
    '''

    11、从实例中访问类属性

    '''
    从实例中访问类变量的步骤是先访问实例的变量
    然后访问类的变量
    '''
    if __name__ == '__main__':
        foo = Foo()
        #通过实例访问类变量
        print(foo.x)
        #这里是创建了一个实例变量
        foo.x = 0
        #再次访问类变量
        print(Foo.x)
        #再次访问x,这里访问的是实例的变量而不是类的变量
        print(foo.x)
        #删除实例属性
        del foo.x
        #又可以访问到类属性
        print(foo.x)
    '''
    1.5
    1.5
    0
    1.5
    '''

    12、类属性为字典类型(可变模型)


    class Foo(object):
        x = {'teacher':'tome'}
    if __name__ == '__main__':
        foo = Foo()
        #访问类属性
        print(foo.x)
        #添加实例属性(修改类属性)
        foo.x['student'] = 'kang'
        #访问实例属性
        print(foo.x)
        #访问类属性
        print(Foo.x)
    
    '''
    {'teacher': 'tome'}
    {'teacher': 'tome', 'student': 'kang'}
    {'teacher': 'tome', 'student': 'kang'}
    '''
    这里的实例属性由于没有遮蔽类属性,不能被删除掉

    13、类属性的持久性

    类属性相当于一个静态变量,独立于实例

    欢迎关注我的公众号:小秋的博客 CSDN博客:https://blog.csdn.net/xiaoqiu_cr github:https://github.com/crr121 联系邮箱:rongchen633@gmail.com 有什么问题可以给我留言噢~
  • 相关阅读:
    hdu 5444 Elven Postman 二叉树
    tensorflow2.x模型保存问题
    【NVIDIA】Win10 + CUDA10 + cuDNN 安装教程(转载)和遇到的坑
    windows下 为不同虚拟环境配置不同的cuda
    多线程
    socket编程
    引用类型和值类型
    记录报错
    github下载慢问题
    LabelImg的安装出现No module named 'libs.resources'错误
  • 原文地址:https://www.cnblogs.com/flyingcr/p/10326940.html
Copyright © 2020-2023  润新知