面对对象初识

一:面向对象技术简介

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 方法:类中定义的函数。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 实例变量:定义在方法中的变量,只作用于当前实例的类。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系。
  • 实例化:创建一个类的实例,类的具体对象。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

 二:类的结构:

1 class Myclass:
2     name = 'lwx' #静态属性, 静态变量, 静态字段
3 
4     
5     def fun(self): #函数, 动态属性, 方法
6         pass
7         #函数封装一个功能, 而面对对象封装多个相关的功能
8         #面对对象抽象, 它是一种思想, 站在上帝的角度去理解他
9         #程序可扩展, 对象都是一个个独立的, 耦合性, 差异性。

三:类实例化一个例子:

 1 class Person: #一个公共框架, 一个公共模型
 2     animal = '神级人物'
 3     walk_way = '我是天使,我会飞!'
 4     language = 'ASCCI'
 5     def __init__(self, name, eag): #功能:给对象封装属性
 6        self.name = name
 7         self.eag = eag
 8     def walk(self):
 9         print(4444)
10 p1 = Person('lwx', 25)  #创建一个类的实例,累的具体对象
11 #实例化内部进行了三个阶段吧
12 # 1:从内存中开辟了一个对象空间
13 # 2:自动执行类中__init__方法,并且将对象空间自动传给self参数,其他参数手动传入
14 # 3:执行__init__方法,并将对象空间封装相应的属性

 四:查看类对象的方法

  1,类

    1》查看类中的所有属性及方法

    

 1 class Person:
 2     name = 'lwx'
 3     eag = 25
 4     def __init__(self,sex, work):
 5         self.sex = sex
 6         self.work = work
 7     def fun(self):
 8         print('我是一个方法')
 9 #1:查看类中的所有属性及方法
10 # print(Person.__dict__)
11 '''{'__module__': '__main__', 'name': 'lwx', 'eag': 25, '__init__': <function Person.__init__ at 
12 0x03679540>, 'fun': <function Person.fun at 0x036794F8>, '__dict__': <attribute '__dict__' of 'Person' objects>, 
13 '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}'''
14 Person.__dict__['name'] = 'alex' #不能改变
15 print(Person.__dict__['name']) #可以查询

    注意点:工作中,学习中一般用到的___dict__查看类中的所有属性及方法,不进行其他操作

    2》查看, (增删改)类中某个, 某些属性用到万能的 .

      

1 print(Person.name) #查询类中的变量
2 Person.name = '雷文轩' #修改
3 Person.animal = '高级任务' #没有的变量名字是增加,有的是改
4 del Person.name #删除
5 print(Person.__dict__) #name 已经移除

  2:对象

    1》实例化过程内部进行了3个阶段

      (1):在内存中开辟了一个对象空间

      (2):自动执行类中的__init__方法, 并且将对象空间自动传给self参数

      (3):执行__init__ 方法, 给对象空间封装相应的属性

    2》对象操作对象空间

      (1)查看对象空间所有的属性__dict__

         1 p1 = Person(25, 'IT') 2 print(p1.__dict__) 

      (2)对象操作对象的某个属性,增删改查  用万能的 点

      

 1 #增加
 2 # p1.name = 'wuyan' #对象的增加
 3 print(p1.name) #此时的p1.name 是类的里面的
 4 p1.name = p1.name #=号右边值添加给对象name
 5 #对象操作类空间的属性只能查
 6 print(p1.__dict__)
 7 p1.__dic__ = {1:2} #一般不这样操作的
 8 print(p1.__dic__)  #此时对象只有{1:2}
 9 
10 #删除
11 del p1.name
12 #
13 print(p1.__dic__)  

5:类名称空间 和公共空间

  1》类是一个公用模板, 公用框架

  2》对象为什么能调用类中的属性与方法而且只能调用,不能改变?

    首先对象从自己的空间去找, 没有属性他会通过类对象,对象只能查看类中的属性, 不能增删改类中的属性

  3》类能不能调用对象的属性? 不能

  4》对象与对象之间可不可互相调用?

    同一类实例化出来的对象之间是不能互相访问的

    不同类势力化的对象有可能互相访问

 6:给对象封装属性: __init__任意位置。

 7:对象的组合

  1:组合的意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系

  2:组合的方式;

    1》:一种是在类里面封装一个方法

    2》:另一种是直接给对象添加一个属性等于一个对象名,通过赋值的属性调用另一个对象,

    2:不同类对象可以相互关联,这样就可以调用

       

      

原文地址:https://www.cnblogs.com/leiwenxuan/p/9524503.html