zoukankan      html  css  js  c++  java
  • python-类

     对象属性:

    class A:
    pass

    s=A()
    s.num=10 #动态增加一个对象属性
    s.name='张三'
    s.age=18
    print(s.num)
    print(s.__dict__) #返回对象的所有属性,不包含类属性
    #{'num': 10, 'name': '张三', 'age': 18}
    del s.age #删除属性

    s.__dict__={'name':'lm','num':1001}        #动态增加属性

    #A.__dict__={'wuli':78}  #这是错误的   这种方式可以增加对象属性,不能增加和修改类属性

    类.__dict__   是只读的,不能写

    对象__dict__   是可读可写的

    限制对象属性的添加:

    class A:
        __slots__ = ['age','id']  #这个类只能添加的属性
        age=18   #增加一个类属性
        id=1001
    
    d=A()

     类属性:

    class A:
    age=18 #增加一个类属性
    id=1001

    A.num = 100 #动态增加一个类属性
    del A.id #删除类属性

     方法:

     实例方法(对象方法):方法的第一个参数一般是self

    类方法:

     

    静态方法:

     

     动态创建类:

    #动态创建类:利用元类创建类对象
    def func(self):
        print('函数')
    
    AAA=type('Dog',(),{'age':18,'func':func})
    #AAA   类的对象名
    #参数1 类名称      参数2 元组-父类
    #参数3  字典:属性和方法
    
    d=AAA()
    print(d.age)
    d.func()

     视频教程  https://www.bilibili.com/video/av50407114/

     私有属性和受保护属性:

    前面加一个下划线是受保护属性   _x         只能在类内和子类中访问

    前面加二个下划线是私有属性   __x      只能在类内访问

     

      

    s=isinstance(a,A)   判断a是不是类A的对象

     返回true,不是返回false

    isinstance() 与 type() 区别:

    type() 不会认为子类是一种父类类型,不考虑继承关系。

    isinstance() 会认为子类是一种父类类型,考虑继承关系。

    如果要判断两个类型是否相同推荐使用 isinstance()

    例子

    >>>a = 2

    >>> isinstance (a,int)

    True

    >>> isinstance (a,str)

    False

    >>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True

    True

    issubclass(class, classinfo)     判断参数 class 是否是classinfo 的子类

    如果 class 是 classinfo 的子类返回 True,否则返回 False。

     print(d.__class__)  #返回创建对象的类

    单继承:

    class A():
        pass
    class B():
        pass
    class A1(A,B):
        pass
    
    print(A1.__bases__)  #返回类A1的基类
    #(<class '__main__.A'>, <class '__main__.B'>)

    初始化函数:如果子类本身有就执行子类的,如果子类没有就执行父类的 

    class A():
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def eat(self):
            print('吃药')
    
    class A1(A):
        def __init__(self,name,age,jinqian):
            #子类继承了父类的方法
    
            #A.__init__(self,name,age)  #执行父类初始化函数--方法一
            #只有执行父类初始化函数,子类才有self.name、self.age属性
    
            #super(A1,self).__init__(name,age)  #执行父类初始化函数--方法二
            super().__init__(name, age)  # 执行父类初始化函数--方法三
            #A1,self  可以省略
    
    
            self.jinqian=jinqian  #派生属性(父类没有的属性)
    
    class A2(A):
        def __init__(self,name,age,jinqian):
            #子类继承了父类的方法
            A.__init__(self,name,age)  #执行父类初始化函数
            #只有执行父类初始化函数,子类才有self.name、self.age属性
            self.jinqian=jinqian  #派生属性(父类没有的属性)
        def eat(self):  #重写父类方法
            #父类子类都有就执行子类自己的,子类没有才到父类寻找
            print('吃饭')
    
            #如果还想执行父类的同名方法,就需要调用
            A.eat(self)
    
    d1=A1('张三',24,100)
    d1.eat()
    d2=A2('李四',24,100)
    d2.eat()

     天子骄龙

  • 相关阅读:
    移动端调试利器-vConsole
    html手机调试
    vue实现PC端分辨率适配
    uniapp 判断 IOS和Android的GPS是否开启并设置启动
    Fiddler抓包工具使用
    js对象数组多字段排序
    时间戳转换时间格式
    从一个数组中删除另一个数组中存在的元素
    Python_下载二次登录后的页面源码
    Python_ip被封用代理
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10649110.html
Copyright © 2011-2022 走看看