zoukankan      html  css  js  c++  java
  • 初识面向对象

    一:面向对象编程

    1,类的概念 : 具有相同属性和技能的一类事物。 比如:人类(抽象)

    对象:就是对一个类的具体描述。 比如:具体的人(具体)

    2,面向对象的特点:结局的不确定性

    3,为什么要引入面向对象?

    (1)使得代码之间的角色关系更加明确

    (2)增强了代码的可扩展性

    (3)规范了对象的属性和技能

    二:查看静态变量的两种方式
    1.类名.__dict__['静态变量名'] 可以查看,但是不能删改

    2.类名.静态变量名 直接就可以访问,可以删改,删除一个静态变量 del 类名.静态变量名
    # class Person:
    #     role = 'person'   # 静态属性
    #     def f1(self):     # 动态属性 方法(函数)  默认带一个参数self
    #         print(1234567)
    #
    # print(Person.__dict__)
    # print(Person.__dict__['role'])
    # # 内置的双下方法(查看静态变量的第一种方式,只能查看,不能修改)
    #
    # print(Person.role)
    # Person.role = 456
    # print(Person.role)
    # del Person.role
    # print(Person.__dict__)
    # #查看静态变量的第二种方法,可以对静态变量进行查看,修改和删除
    View Code

    三:引用动态变量

    1.类名.方法名,查看这个方法的内存地址
    2.类名.方法名(实参产生一个实例) 调用了这个方法,必须传一个实参,这个实参传给了self
    class Person:
        role = 'person'  # 静态属性
        def f1(self):  # f1 叫做动态属性 ,方法(函数)  默认带一个参数self
            print(1234567)
    print(Person.f1)           #<function Person.f1 at 0x00000000026F9950>
    Person.f1('aa')           #1234567
    View Code

    四:创建一个对象

    1,类名()就可以创造一个对象(实例)。

    即对象=类名(),这个过程又叫做实例化。在创造对象的过程中,会创造一个新的名称空间,唯一属于这个对象。

    2,在类的内部 self是本类的一个对象,

    3,在类的外部,每一个对象都对应着一个名字,这个对象指向一个对象的内存空间

    class Person:
        role='person'    #静态属性
        def __init__(self):   #动态属性
            print("执行了")
    
    alex=Person()     #执行了
    View Code

    ps:上述程序就是实例化(创建一个对象)的过程,程序的最后一句  alex=Persion()  , 在这里alex只是一个变量,用于接收调用后的结果,在调用的过程中,alex只是接收一个变量,这个变量刚好就是创建出来的那个对象。

    【注】实例化的过程分析:

    (1) 首先创造一个实例,它将会作为一个实参。(开辟空间,让它和创造的实例联系起来)

    (2)然后自动促发__init__的方法,并且把实例以参数的形式传递给__inin__方法中的self形参

    (3)执行完__init__方法后,会将创建的实例自动返回给alex

    五:在创建对象时,如何给这个对象添加属性呢?

    这时就要用到__init__方法: 它是一种初始化方法,给一个对象添加一些基础属性的方法,一般情况下是针对self的赋值

    程序及分析如下:

    class Person:
        role='person'    #静态属性
        def __init__(self,name,sex,hp,ad):   #动态属性
            self.__dict__['name']=name
            self.__dict__['sex'] = sex
            self.__dict__['sex'] = sex
            self.__dict__['ad'] = ad
    #因为此处只能返回默认的self,但是self里面内置了一个空字典,
    #所以只能往self里的字典加东西,才能让外面的alex感知到,这样就有了属于sb自己的一堆属性了。
    
    alex=Person("sb","","20","30")
    print(alex.__dict__)     #{'name': 'sb', 'sex': '男', 'ad': '30'}
    #self 和 alex 处于同一个内存地址,self能够查看dict,同样也可以通过alex查看。
    View Code

    程序也可以简化如下(注:也可以对所创建的对象的属性进行修改):

    class Person:
        role='person'    #静态属性
        def __init__(self,name,sex,hp,ad):   #动态属性
            self.name=name
            self.sex = sex
            self.hp = sex
            self.ad = ad
    
    alex = Person("sb", "", "20", "30")
    alex.__dict__["name"]='sss'
    print(alex.name)
    View Code

    六:在创建完对象后,如何对方法进行调用呢?

    1,类名.方法名(对象名) # 那么方法中的self参数就指向这个对象

    2,对象名.方法名()     这样写 相当于 方法中的self参数直接指向这个对象

    class Person:
        role = 'person'   # 静态属性
        def __init__(self,name,sex,hp,ad):
            self.name = name     # 对象属性 属性
            self.sex = sex
            self.hp = hp
            self.ad = ad
    
        def attack(self):     #动态属性 ,方法(函数)
            print('%s发起了一次攻击'%self.name)
    
    alex = Person('a_sb','',1,5)
    alex.attack()      # Person.attack(alex)
    View Code

     


































































  • 相关阅读:
    1 slow requests are blocked > 32 sec解决方法
    centos7下搭建ceph luminous(12.2.1)--无网或网络较差
    防止集群数据恢复设置
    ceph:health_warn clock skew detected on mon的解决办法
    Windows下判断jdk是否安装好以及环境变量是否配置好
    卸载Myeclipse10.5 报错“an error has occured.See the log file ...Uninstaller...”
    转: Laravel 自定义公共函数的引入
    windows下安装composer
    PHP与.Net的区别(一)接口
    phpStorm+XDebug配置
  • 原文地址:https://www.cnblogs.com/leiwei123/p/8781475.html
Copyright © 2011-2022 走看看