zoukankan      html  css  js  c++  java
  • 类(class)

    类: 把一类事物的相同特和动作整合到一起就是类,类是一个抽象概论(比如人的特征:升高 年龄; 动作:吃饭睡觉等)

    对象: 就是基于上面所说的类创建的一个具体事物(也就是具体存在的,比如一个人)

     

    面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程范型,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象

    简单来说: 面向对象程序设计就是将一类具体事物的数据和动作整合到一起,即面向对象程序设计

     

    面向对象编程(英语:Object Oriented Programming,简称OOP)是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

    简单来说:  面向对象编程就是用定义类+实例/对象的方式去实现面向对象程序设计

     

    Python 2 当中类分为新式类和经典类 Python 3中全部叫新式类

    经典类:

    class 类名:

      pass

    新式类:

    class 类名(父类):

      pass

     

    1 类属性:

       1 数据属性: 就是变量

       2 函数属性: 就是函数,在面向对象里面也叫方法

        注意的是,类和对象都要用点来访问自己的属性

     

    class People:
    '''这是一个测试文件'''
    china_people = '男'
    def __init__(self,name,age):
    self.Name = name
    self.Age = age

    def shoping(self):
    print('%s去买东西了' %self.Name)

    def test(self,foo):
    print('测试%s' %foo)

    p = People('小和',22)

    #查类的属性字典(__dict__)

    print(People.__dict__) #{'__module__': '__main__', 'china_people': '男', '__init__': <function People.__init__ at 0x036347C8>, 'shoping': <function People.shoping at 0x03634660>, '__dict__': <attribute '__dict__' of 'People' objects>, '__weakref__': <attribute '__weakref__' of 'People' objects>, '__doc__': None}

    #找到类中属性字典的test 并且执行;传递一个参数(参数是self需要的
    People.__dict__['test'](People) #测试

    #查看实例化类的属性字典

    print(p.__dict__) #{'Name': '小和', 'Age': 22}

    print(p.Name) #小和
    print(p.china_people) #男
    p.shoping() #小和去买东西了

    单独给方法传参
    p.test('123')

    其他属性:
    print(People.__name__)  #类名字
    print(People.__doc__) #类文档 这是一个测试文件
    print(People.__bases__) #父类
    print(People.__dict__) #类属性
    print(People.__class__) #对应的类
    print(People.__module__) #模块


    2 查看类属性和实例(对象)属性
    实例: dir 和 内置__dict__两种方式
    类属性:
      #类属性又称静态变量 或者静态数据
      #查看类属性
      print(People.china_people)

      #修改类属性
      People.china_people = 'A'
      print(People.china_people)

      #删除类属性
      del People.china_people

      #增加类属性
      People.location = 'Asia'
      print(People.__dict__)

    #增加函数属性
    def foo(self,f)
    pass
    People.foo = foo
    
    
      
    3 类属性和实例属性修改
    class test:
    f = '美国'
    def __init__(self):
    pass
    p = test()

    #修改实例属性
    p.f = '日本'
    print(p.f) #--> 日本

    #类的属性不变
    print(test.f) #--> 美国


    4 类的作用域:
    people_r = '中国人'
    class People:
    '''这是一个测试文件'''
    people_r = '韩国人'
    def __init__(self,name,age):
    self.Name = name
    self.Age = age
    print(people_r) #结果为中国人,因为people_r调用的就是一个变量.不是类里面(也就是加点调用就跟类或者实例有关,不加点就给类和实例无关了,所有这里面打印的是中国人)

    P = People('dsadas',12)
    注释掉后报错:
    #people_r = '中国人'
    class People:
    '''这是一个测试文件'''
    people_r = '韩国人'
    def __init__(self,name,age):
    self.Name = name
    self.Age = age
    print(people_r) #中国人

    P = People('dsadas',12)

    NameError: name 'people_r' is not defined

     

     

    5 实例/对象属性 和 类属性 区别
    class People:
        '''这是一个测试文件'''
        people_r = '韩国人'
        def __init__(self,name,age):
                 self.Name = name
                 self.Age = age

     

        def test(self):
                 print(self.people_r)

     

     

    P = People('dsadas',12)
    P.people_r = '日本人' #修改的是实例本身的,不是修改的类的,也就是init 函数的
    P.test() #结果为日本人
    print(People.people_r) #结果为韩国人

    #上面方式验证的方式 也就是说明了P实例对象后,也就是执行__ini__函数; P.people_r = '日本人' 是修改自身实例化的P内容,并没有修改类里面的其他属性方法;所以执行类里面的数据属性People.people_r 还是韩国人

     

     

    6 反复强调 

       加点调用就跟类或者实例有关,不加点就给类和实例无关了


  • 相关阅读:
    绑定源特性的行为
    理解IOC和DI
    相遇~~~~
    选美素数~~~~~~~(⊙o⊙)
    狐狸找兔纸
    多重背包Q
    最长升序子序列
    构造逆序数
    田径赛马
    01背包M
  • 原文地址:https://www.cnblogs.com/ajaxa/p/9041841.html
Copyright © 2011-2022 走看看