zoukankan      html  css  js  c++  java
  • Python知识4 类与对象【多测师】

    一、类与对象、实例化的概念
    1.Python中实例变量:定义在方法中的变量,只作用于当前实例的类。这个和Java不同
    Java中实例变量的作用于全局变量,但是只能被对象调用。
    2.实例化:创建一个类的实例,类的具体对象
    3.类实例化后,可使用其属性,可以通过类名访问属性
    4.类对象支持俩种操作:属性引用和实例化
    
    二、类创建和调用
    1.调用类的属性和对象的方法
    class MyClass:
        i=123
        def n(self):
            return 'haha'
    
    x=MyClass()
    
    print(x.i) //调用类的属性
    print(x.n())  //实例化对象之后调用方法
    
    三、Python的构造方法
    def __init__(self):   //初始化的实例对象
        self.data=[]
    Python中self的含义:
    1.这里指自己,实例instance本身
    2.此处的self是个对象 object 是当前类的实例
    3.函数也叫方法
    4.其实这里的self和Java中的this差不多
    5.类方法必须包含参数self,且为第一个参数,self代表的是类的实例
    6.学习网址:https://www.crifan.com/summary_the_meaning_of_self_and___init___in_python_and_why_need_them/
    
    四、函数的第一个参数self和Class函数中访问对应的变量(读取和写入)和调用对应函数
    1.访问对应的变量self.valueName
    2.调用对应的函数self.function()  调用函数函数名后面都有小括号()
    3.Python中约定俗成,函数的第一个参数必须为实例对象本身名字写成self
    4.代码演示如果没有在类Class的最初的_init_函数中,正确的初始化实例变量,会导致后续没有变量可用,会出现AttributeError错误
    
    从上述代码可见,由于在类的初始化(实例化)的__init__函数中,没有给self.name设置值,使得实例中,根本没有name这个变量,导致后续再去访问self.name,就会出现AttributeError的错误了。
    对应的,如果写成self.name,则意思就正确了,就是初始化的时候,给实例中新增加,并且正常设置了正确的值newPersionName了,所以后续再去通过self.name,就可以访问到,当前实例中正确的变量name了。
    正确的代码如下:
    
    在函数中,使用对应的变量,虽然代码是可以运行的,但是实际上却是使用的,不是实例中的变量 有时候,虽然你写的代码,可以运行,但是使用到的变量,由于没有加self,实际上是用到的不是实例的变量,而是其他的变量。
    此类问题,主要和Python中的变量的作用域有关,但是此处例子中,也和是否使用self有关:
    
    际上其中,可见,此处开始__init__中,没有给self实例初始化对应的name,而后面的函数sayYourName中,虽然可以调用到self.name而没有出现AttributeError错误,但是实际上此处的值,不是所期望的,传入的name,即"crifan",而是类中的name的值,即"class global name”。
    
    五、Python中为什么要有_init_
    1.支持带参数的类的初始化 对应Class初始化时 可以运行传递不同的参数
    
    其中,就是针对Person这个类
    不同的示例,在初始化的时候,都传递一个对应的参数,这样不同的Person,就都有了自己的不同的名字了。
    这个,至少看起来,有点类似于,其他语言中的,传递特定参数去对类进行初始化。
    实现类本身相关内容的初始化
    当一个Class,稍微复杂一点的时候,或者内部函数需要用得到的时候,往往都需要在,别人实例化你这个类之前,使用你这个类之前,做一些基本的,与自己的类有关的,初始化方面的工作,而这部分工作,往往就放到__init__函数中去了。
    换句话说,你要用人家的类(中的变量和函数)之前,总要给人家一个机会,做点准备工作,然后才能为你服务吧。
    演示代码就不用了,因为上面的代码,也可以算是这方面的例子了,不同的人,应该有不同的名字,而给不同的人设置不同的名字,也是需要在调用sayYourName之前,就先初始化好的。
    
    六、类的方法
    在类的内部用def关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数self且为第一个参数,self代表的是类的实例
    代码如下:
    # 类定义
    class people:
        # 定义基本属性
        name = ''
        age = 0
        # 定义私有属性,私有属性在类外部无法直接进行访问
        __weight = 0
    
        # 定义构造方法
        def __init__(self, n, a, w):
            self.name = n
            self.age = a
            self.__weight = w
    
        def speak(self):
            print("%s 说: 我 %d 岁。" % (self.name, self.age))
    
    # 实例化类
    p = people('xiaoshu', 10, 30)
    p.speak()

    一、self是什么东西?
    OOP  面向对象编程
    OOD  面向对象设计
    OOA  面向对象分析
    Python的self 就等于C++的this的指针
    类是图纸 由类实例化后的对象才是真正可以住人的房子 
    可以根据图纸可以生产成千上万的房子 self就是门牌号
    类生产很多对象 
    class Ball:
        def setName(self,name):
            self.name = name
    
        def kick(self):
            print("我叫%s,该死的,谁踢我..."%self.name)
    
    a=Ball()
    a.setName('球A')
    b=Ball()
    b.setName('土豆')
    
    a.kick()
    b.kick()
    
    运行结果:
    我叫球A,该死的,谁踢我...
    我叫土豆,该死的,谁踢我…
    
    二、构造方法
    1._init_(self) 只要实例化一个对象 那么这个方法就会在对象创建的时候自动被调用
    2.实例化对象可以传入参数 重写这个init方法来进行初始化操作
    3.实例代码如下:
    class Ball:
        def __init__(self,name):
            self.name = name
    
        def kick(self):
            print("我叫%s,该死的,谁踢我..." % self.name)
    
    a=Ball('球A')
    a.kick()
    b=Ball()  //这个就会报错需要传入name参数
    
    三、公有被私有
    1.苍井空是世界的 老婆是自己的
    2.Python的属性和方法都是公有的
    class Person:
        name ='我是帅的'
    p = Person()
    p.name
    
    3.在Python中定义私有变量只需要在变量名或函数名前加上 __双下划线name这个函数或变量就会变为私有的了4.私有变量
    class Person:
        __name ='我是帅的'
        def getName(self):
            return self.__name
    p = Person()
    p.__name //这个是访问不到的
    p.getName() //只能通过这个内部的方法调用
    p._Person__name //这个可以调用、因为Python的私用机制是的概念其实是伪私有的
    Python的类是没有权限控制的 变量是可以被外部调用的
  • 相关阅读:
    集合-ArrayList 源码解析
    >>《配色设计原理.pdf》
    >>《[美国视觉设计学院用书:完成设计(从理论到实践)].(萨马拉).温迪等.扫描版.pdf》
    《Photoshop智能手机APP界面设计.pdf》
    《贴心设计:打造高可用性的移动产品》——5.平板电脑和电子书阅读器
    3H Buy a Ticket —— Dij
    最短路板子
    3E A Simple Problem —— 数论
    3D 城池攻占 —— 左偏树
    3A Least Cost Bracket Sequence —— 贪心
  • 原文地址:https://www.cnblogs.com/xiaoshubass/p/13113901.html
Copyright © 2011-2022 走看看