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

    了解一些名词:类、对象、实例、实例化

    类:具有相同特征的一类事物(人、狗、老虎)

    对象/实例:具体的某一个事物(隔壁阿花、楼下旺财)

    实例化:类——>对象的过程

    在python中,用变量表示特征,用函数表示技能,因而具有相同特征和技能的一类事物就是‘类’,对象是则是这一类事物中具体的一个。

    定义类:
    '''
    class 类名:
        '类的文档字符串'
        类体
    '''
    
    #我们创建一个类
    class Data:
        pass
    class Person:   #定义一个人类
        role = 'person'  #人的角色属性都是人
        def walk(self):  #人都可以走路,也就是有一个走路方法,也叫动态属性。#self是默认的,必加的
            print("person is walking...")
    
    def 函数名():
        '''函数体'''
        pass
    
    # class Person: 
    #     country = '中国'   #静态属性、数据属性
    #     def walk(self):    #动态属性、函数属性、方法。self是默认的,必加的。
    #         print('walk')

    类名有两个作用:
    1.属性引用

    静态属性的引用:

    # print(Person.country) #静态属性的查看
    print(Person.walk)  #引用人的走路方法,注意,这里不是在调用
    # Person.role = '人'  #添加一个新静态属性
    # Person.country = '印度'  #修改一个新静态属性
    # del Person.role #删除一个静态属性

    查看类名的所有属性:

    print(dir(Person))

    类能完成的第二个功能:实例化对象
    实例化:从一个类中创造一个具体的对象的过程

    实例化:类名加括号就是实例化,可以用它来为每个实例定制自己的特征

    实例化的过程就是类——>对象的过程 语法:对象名 = 类名(参数)

    class Person:
        country = "中国"
        def walk(self):
            print("%s is working" %self.name)
    
    p = Person()
    print(p)
    
    输出:
    <__main__.Person object at 0x000001B56220B0F0>

    如何让对象拥有具体的属性(初始化过程):
    #__init__方法:初始化方法,可以没有。给对象添加一些必要的基础属性

    class Person:
        country = "中国"
        def walk(self):
            print("%s is working" %self.name)
    
        def __init__(self, life_value, aggr, name, job):
            self.lv = life_value     #属性,对象属性
            self.aggr = aggr
            self.name = name
            self.job = job
    p = Person(1000,2,"金老板","boss")  #如何让对象拥有具体的属性
    # 查看对象的属性:
    print(p.lv)  #Person的对象
    print(p.aggr)  #Person的对象
    print(p.name)  #Person的对象
    print(p.job)  #Person的对象、
    
    输出:
    1000
    2
    金老板
    boss

     对象/实例只有一种作用:属性引用

    一次性看到对象内的所有属性:
    # print(p.__dict__)

    class Person:
        country = "中国"
        def walk(self):
            print("%s is working" %self.name)
    
        def __init__(self, life_value, aggr, name, job):
            self.lv = life_value     #属性,对象属性
            self.aggr = aggr
            self.name = name
            self.job = job
    p = Person(1000,2,"金老板","boss")  #如何让对象拥有具体的属性
    # 查看对象的属性:
    # print(p.lv)  #Person的对象
    # print(p.aggr)  #Person的对象
    # print(p.name)  #Person的对象
    # print(p.job)  #Person的对象
    
    # 一次性看到对象内的所有属性:
    print(p.__dict__)
    
    输出;
    {'lv': 1000, 'aggr': 2, 'name': '金老板', 'job': 'boss'}

    对象调用一个方法: p.walk()  # Person.walk(p)

    class Person:
        country = "中国"
        def walk(self):
            print("%s is working" %self.name)
    
        def __init__(self, life_value, aggr, name, job):
            self.lv = life_value     #属性,对象属性
            self.aggr = aggr
            self.name = name
            self.job = job
    p = Person(1000,2,"金老板","boss")  #如何让对象拥有具体的属性
    
    p.walk()  #对象的调用
    
    输出:
    金老板 is working

    对象属性的增删改查有2套标准:
    这种好!

    class Person:
        country = "中国"
        def walk(self):
            print("%s is working" %self.name)
    
        def __init__(self, life_value, aggr, name, job):
            self.lv = life_value     #属性,对象属性
            self.aggr = aggr
            self.name = name
            self.job = job
    p = Person(1000,2,"金老板","boss")  #如何让对象拥有具体的属性
    
    p.sex = 'lady_boy'  #添加一个属性
    print(p.sex)
    p.sex = 'girl'  #属性的修改
    print(p.sex)    #属性的删除
    del p.sex
    
    输出:
    lady_boy
    girl

    第二种(了解)

    # print(p.__dict__['lv']) #查看
    # p.__dict__['lv'] = 998  #对象名.__dict__中的属性值可以被修改
    # p.__dict__['sex'] = 'lady_boy' #对象名.__dict__中的属性值可以增加
    # p.__dict__.pop('sex')  #对象名.__dict__中的属性值可以被删除
    # print(p.__dict__)
    查看:
    # print(p.__dict__,p.sex)

    #类

    # 类的定义 class关键字 类名的首字母大写

    # 类中直接定义属性:静态属性(变量) 和 动态属性(函数)

    # 类名的两个作用:属性的引用,实例化对象

    # 类名和属性的操作:         对象名.属性名         对象名.__dict__['属性名'](不能修改)

    #实例化 ——类名(参数)

    #构造方法:造对象 #初始化__init__:给这个赤裸裸的对象添加一些属性 __init__ #返回了一个初始化之后的对象

    #self的含义:就是这个对象本身

    #对象和属性的操作:对象名.属性名 对象名.__dict__['属性名']

    对象调用一个方法: p.walk()            # Person.walk(p)

    class 类名:
        def __init__(self,参数1,参数2):
            self.对象的属性1 = 参数1
            self.对象的属性2 = 参数2
    
        def 方法名(self):pass
    
        def 方法名2(self):pass
    
    对象名 = 类名(1,2)  #对象就是实例,代表一个具体的东西
                      #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法
                      #括号里传参数,参数不需要传self,其他与init中的形参一一对应
                      #结果返回一个对象
    对象名.对象的属性1   #查看对象的属性,直接用 对象名.属性名 即可
    对象名.方法名()     #调用类中的方法,直接用 对象名.方法名() 即可

    #对象就是实例,代表一个具体的东西                  

    #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法                  

    #括号里传参数,参数不需要传self,其他与init中的形参一一对应                  

    #结果返回一个对象 对象名.对象的属性1  

    #查看对象的属性,直接用 对象名.属性名 即可 对象名.方法名()    

    #调用类中的方法,直接用 对象名.方法名() 即可

    类命名空间与对象、实例的命名空间

    创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

    而类有两种属性:静态属性和动态属性 •静态属性就是直接在类中定义的变量 •动态属性就是定义在类中的方法

     面向对象的交互:

    人狗大战:

    class Person:
        def __init__(self, life_value, aggr, name, job):
            self.lv = life_value
            self.ag = aggr
            self.name = name
            self.job = job
    
        def attack(self, dog_obj):
            dog_obj.lv = dog_obj.lv - self.ag
            print("%s 攻击了 %s, %s 余血 %d" % (self.name, dog_obj.name, dog_obj.name, dog_obj.lv))
    
    class Dog:
        def __init__(self, life_value, aggr, name, kind):
            self.lv = life_value
            self.ag = aggr
            self.name = name
            self.kind = kind
        def bite(self, person_obj):
            person_obj.lv = person_obj.lv - self.ag
            print("%s 咬了 %s, %s 余血 %d"%(self.name, person_obj.name, person_obj.name, person_obj.lv))
    
    
    
    tiedan = Dog(1000, 100, "铁蛋", "土狗")
    boss_gold = Person(100, 2, "太白太亮", "old_diver")
    
    boss_gold.attack(tiedan)
    tiedan.bite(boss_gold)
    
    输出:
    太白太亮 攻击了 铁蛋, 铁蛋 余血 998
    铁蛋 咬了 太白太亮, 太白太亮 余血 0
  • 相关阅读:
    requireJS的使用_API-1
    C# WebService动态调用
    Jquery 分页插件 Jquery Pagination
    脸识别API微软牛津项目
    从源码看Android中sqlite是怎么读DB的(转)
    浅谈SQL注入风险
    django
    java自动转型
    二叉搜索树(Binary Search Tree)--C语言描述(转)
    微软2014校园招聘笔试试题
  • 原文地址:https://www.cnblogs.com/biluo/p/7856446.html
Copyright © 2011-2022 走看看