zoukankan      html  css  js  c++  java
  • 面向对象初识,类名称空间,对象名称空间

    一、对象的结构初识:
    类包括两部分:静态属性和方法
    class A:
        name='alex'   #静态属性
        def fun(self):  #动态属性,即方法
            pass
    函数和面向对象的区别:
    1、函数是封装一个功能,面向对象是封装多个相关功能!
    2、面向对象很抽象,它是一种思想。
    3、程序可扩展,对象都是一个个独立的,具有耦合性和差异性。

    二、类,对象
    类,是具有相同属性或者功能的一类实物。对象,是类的具体体现。
    我们可以把类想象成是一个公共框架,一个公共模型:
    定义一个类:
    class Person:
        animal = '高级动物'
        walk_way = '直立行走'
        language = '语言'
        def eat(self):
            print('该吃吃,该喝喝,啥事别忘心里搁')
        def work(self):
            print('人类都需要工作。。。')

    (1)类名的使用:
    1、查看类中的所有属性及方法,使用: __dict__ 方法
    print(Person.__dict__)  #以字典的形式输出类中的所有方法及属性
    print(Person.__dict__['animal'])   # 通过__dict__方式单独的属性及方法可以查,但是不能增删改
    Person.__dict__['animal'] = '低级动物'
    Person.__dict__['name'] = 'alex'   #这个会报错,所以不能增
    print(Person.__dict__)
    注:在工作中或者学习中,一般用到__dict__方法的都是查看类中的所有属性及方法,不进行其他操作。

    2,查看(增删改)类中某个或者某些属性及方法用万能的点'.'
    print(Person.animal)
    print(Person.language)
    
    增
    Person.name = 'alex'
    print(Person.name)
    
    改
    Person.animal = '低级动物'del Person.walk_way
    print(Person.__dict__)
    
    3,操作方法一般不通过类名操作!!!
    Person.__dict__['work'](111)   #不建议通过__dict__执行方法
    Person.work(666)  #虽然可以执行但是不建议

    (2)对象
    例1:
    class Person:
        animal = '高级动物'
        walk_way = '直立行走'
        language = '语言'
        def __init__(self):   # 这个函数的作用:给对象封装属性的。
            pirnt(self)
        def eat(self):
            print('该吃吃,该喝喝,啥事别忘心里搁')
        def work(self):
            print('人类都需要工作。。。')
    obj=Person()
    print(obj)
    执行的结果是:
    <__main__.Person object at 0x00000000021E7B00>
    <__main__.Person object at 0x00000000021E7B00>
    到这里我们看到执行结果是一样的,都是指向同一个内存地址。类名+()实例化一个对象空间后自动传值给self。
    
    例2:实例化一个具体的对象
    class Person:
        animal = '高级动物'
        walk_way = '直立行走'
        language = '语言'
        def __init__(self,name,age,eye):   # 这个函数的作用:给对象封装属性的。
            self.name1 = name
            self.age1 = age
            self.eye1 = eye
        def eat(self):
            print('该吃吃,该喝喝,啥事别忘心里搁')
        def work(self):
            print('人类都需要工作。。。')
    obj=Person('alex',1000,'小眼睛')  #类名+(),指的是一个类实例化过程,他会实例化一个对象(它会在内存实例化一个对象空间)。
    print(obj.name1)

    实例化过程内部进行了三个阶段:
    1、在内存中开辟了一个对象空间,内部只有一个类对象指针;
    2、自动执行类中的__init__方法(形成类对象指针),并且将对象空间自动传给self参数,其他参数手动传入。
    3、执行__init__方法,给对象空间封装相应的属性。

    对象的操作:
    1、对象操作对象空间
    print(obj.__dict__)  #对象查看对象空间所有的属性__dict__
    
    2、对象操作对象的某个属性(增删改查)使用万能的点'.'
    增:obj.sex = ''
    删:del obj.eye1
    改:obj.eye1 = '大一点'
    print(obj.name1)  #对象可以查看类的中的属性即方法
    print(obj.__dict__)
    
    3、对象操作类空间的属性,只能查,不能做其它的操作
    print(obj.animal)
    obj.animal = '低级动物' #会报错的
    print(obj.animal)
    print(obj.__dict__)
    print(Person.__dict__)
    
    4、对象操作类空间的方法
    obj.eat()

    问题:
    1、对象为什么能调用类中的属性与方法而且只是调用,不能改变?
    对象空间.属性名
    先从对象自己空间中去找,如果没有此属性他会通过类对象指针从类去找,类中找不到,会从父类去找。
    2、对象只能查看类中的属性,不能增删改类中的属性。
    3、类能不能调用对象的属性?不能!
    4、对象与对象之间可不可互相调用?
    同一个类实例化出来的对象之间是不能互相访问的,不同类实例化的对象有可能互相访问。
    5、给对象封装属性:__init__方法可以在任意位置添加。
  • 相关阅读:
    素数推断算法(高效率)
    Hibernate的fetch
    TRIZ系列-创新原理-22-变害为利原理
    Offer是否具有法律效力?
    浅谈C++多态性
    C语言scanf函数详解
    大话设计模式之原型模式
    Android源码文件夹结构
    简单的REST的框架实现
    android startActivityForResult的用法
  • 原文地址:https://www.cnblogs.com/banjh/p/9531855.html
Copyright © 2011-2022 走看看