• python面向对象,类的定义,类初始化,实例,类变量,实例变量,


    :抽象的概念;是属性和方法的集合。类中的函数叫方法。

    对象instance、object

    对象是类的具象,是一个实体。对象是数据和操作的封装。

    面向对象3要素:

      1.封装

      2.继承:

        多复用,继承来的就不用自己写了

        多继承少修改。

      3.多态

        面向对象编程最灵活的地方,动态绑定。

    类:

      必须使用class关键字。

      类名必须使用大驼峰命名。

      类定义完成后,就产生了一个类对象,绑定到了ClassName上。

    类对象:类的定义就会生成一个类对象。

    类的属性:类定义中的变量和类中定义的方法都是类的属性。

    类变量:x是类MyClass的变量。

    class MyClass:
        """help myclass"""
        x=123
        def foo(self):
            print(self.x)
    print(MyClass)
    print(MyClass.__name__)
    print(MyClass.x)
    print(MyClass.foo)
    print(MyClass.__doc__)
    print(type(MyClass))
    

     foo是method方法对象,不是普通的函数对象function了(函数function不在类里面),它必须至少有一个参数,且第一个参数必须是self(self可以换名字),但这个参数位置就留给了self。 java是使用this.

     self指代当前实例本身; 

     __init__方法

    MyClass()实际上调用的是__init__(self)方法,可以不定义,如果没有定义会在实例后隐式调用。

    作用:对实例进行初始化。

    __init__()方法不能有返回值,也就是只能是None.

    实例可以访问类属性,类不可以访问实例属性。方法中可以通过self.y等来定义实例属性。

    初始化函数可以多参

     

     

     

     

     实例对象instance

    类实例化后一定会获得一个对象,就是实例对象。

    __init__方法的第一个参数self就是指代某一个实例。

     实例变量,类变量

    实例变量是每一个实例自己的变量,是自己独有的;类变量是类的变量,是类的所有实例共享的属性和方法。

    特殊属性:含义

    __name__:对象名

    __class__:对象的类型

    __dict__:对象的属性的字典

    __qualname__:类的限定名

     总结

      是类的,也是这个类所有实例的,其实例都可以访问到;是实例的,就是这个实例自己的,通过类访问不到。

    类变量是属于类的变量,这个类的所有实例可以共享这个变量。

    实例可以动态的给自己增加一个属性。实例.__dict__[变量名]和实例.变量名都可以访问到。

    实例的同名变量会隐藏这类变量,或者说是覆盖了这个类变量。

    实例属性的查找顺序

    指的是实例使用.来访问属性,会先找自己的__dict__,如果没有,然后通过属性__class__找到自己的类,再去类的__dict__中找。

    注意,如果实例使用__dict__[变量名]访问变量,将不会按照上面的查找顺序找变量了。

    一般来说,类变量使用全大写来命名。

    class Person:
        age=3
        height=170
        def __init__(self,name,age=18):
            self.name=name
            self.age=age
    hua=Person('hua')
    Tony=Person("Tony",20)
    Person.age=30
    print(Person.age,hua.age,Tony.age)#30,18,20
    print(Person.__dict__,hua.__dict__,Tony.__dict__,sep="
    ")
    print(Person.height,hua.height,Tony.height)#170,170,170
    Person.height+=20
    print(Person.height,hua.height,Tony.height)#190,190,190
    print(Person.__dict__,hua.__dict__,Tony.__dict__,sep="
    ")
    hua.height=20
    print(Person.height,hua.height,Tony.height)#190,20,190
    print(Person.__dict__,hua.__dict__,Tony.__dict__,sep="
    ")
    print(Person.__dict__["height"])
    print(Tony.__dict__["height"])#报错keyerror
    #对象优先访问自己的属性/字典,自己没有,则访问类的属性/字典
    

      

      

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    初步掌握Yarn的架构及原理(转)
    CORS 专题
    WebSocket是一种协议
    InputStream中read()与read(byte[] b)(转)
    listview异步加载sd卡图片
    ListView getView中放置多个item和getItemViewType的用法
    Android ListView异步加载数据
    android sqlite 一次创建多个表
    Android Adapter的getViewTypeCount和getItemViewType
    Android 获取SDCard上图片和视频的缩略图
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13336765.html
Copyright © 2020-2023  润新知