python面向对象编程 Object-Oriented

面向对象编程 Object-Oriented Programing

今天相关的名词:
  类, 对象,实例, 实例方法, 实例属性,初始化方法,析构方法
什么是对象:
  对象是指现实中的物体或实体
面向对象
  是把一切看成对象(实例), 用各种对象之间的关系来描述事务
对象有什么特征:
  对象有很多属性(名词,形容词)
    姓名,年龄,性别,肤色
  对象有很多行为(动作,动词)
    学习,吃饭,睡觉,踢球
什么是类
  拥有相同属性和行为的对象分为一组即为一个类
  类是用来描述对象的工具,用类可以创建
    此类的对象(实例)

 示意:

  车(类) ---> BYD 秦 京A.89898 实例
     \--> BMW X5 京B.00000 实例
  狗(类) ---> 京巴(户籍:00001)
    \---> 导盲犬(户籍:00002)
  int(类) ---> 100(对象,实例)
    \
    \.--> 200(对象,实例)
View Code

类的创建语句 class 语句
  语法:
    class 类名(继承列表):
      '类的文档字符串'
      实例方法
      类变量
      类方法(@classmethod)
      静态方法(@staticmethod)
    作用:
      创建一个类
      类用于描述对象的行为和属性
      类用于创建此类的一个或多个对象(实例)

    说明:
      继承列表可以省略

构造函数
  构造函数调用表达式
    类名([创建传参列表])
  作用:
    创建这个类的实例对象,并返回此实例对象的引用关系

# 此示例示意用类来创建实例对象
class Dog: # 创建类
pass

dog1 = Dog() # 创建一个Dog类的实例
print("dog1的id是", id(dog1))
dog2 = Dog()
print("dog2的id是", id(dog2))

lst1 = list()
print('lst1的id是', id(lst1))
lst2 = list()
print('lst2的id是', id(lst2))
View Code

实例方法(instance method)
  语法:
  class 类名(继承列表):
    def 实例方法名(self, 参数列表):
      '方法的文档字符串'
      语句块
  作用:
    用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
  说明:
    实例方法的实质是函数,是定义在类内的函数
    实例方法至少有一个形参,第一个形参绑定调用这个方法的实例,一般命名为'self'
  实例方法的调用语法:
    实例.实例方法名(调用传参)
    或
    类名.实例方法名(实例,调用传参)

 

  class Dog:
    def eat(self, food):
      print("ID为", id(self),"的小狗正在吃", food)
    def sleep(self, hour):
      print("ID为", id(self),'的小狗睡了', hour,'小时')
  dog1 = Dog()
  dog1.eat('骨头')
  dog2 = Dog()
  dog2.eat('狗粮')
  dog2.sleep(3)
  dog1.sleep(1)
  # 类名.实例方法名(实例,调用传参)
  Dog.sleep(dog1, 1)
View Code

实例属性(也叫实例变量) attribute
语法:
  实例.属性名
  赋值规则
    首次为属性赋值则创建此属性
    再次为属性赋值则改变属性的绑定关系
  作用:
    记录每个对象自身的数据

  # 此示例示意属性的创建的使用
  class Dog:
    pass

  dog1 = Dog()
  dog1.kinds = '哈士奇'
  dog1.color = '黑白色' # 创建属性
  print(dog1.color, '', dog1.kinds)
  dog1.color = '黄色' # 修改属性
  print(dog1.color, '', dog1.kinds)

  dog2 = Dog()
  dog2.kinds = '京巴'
  dog2.color = '白色'
  print(dog2.color, '', dog2.kinds)
View Code

删除实例属性
  语法:
    del 对象.实例属性名

  如:
    class Dog:
      pass

  dog1 = Dog()
  dog1.color = '白色'
  print(dog1.color) # 白色
  del dog1.color
  print(dog1.color) # AttributeError
View Code

初始化方法
  作用:
    对新创建的对象添加属性
  格式:
    class 类名(继承列表):
      def __init__(self [, 形参列表]):
        语句块
    注: [] 代表其中的内容可省略
  说明:
    初始化方法名必须为__init__ 不可改变
    初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self传入__init__方法
    构造函数的实参将通过__init__方法的参数列表传入到__init__方法
    初始化方法内如果需要return语句返回,则必须返回None

 

  # 此示例示意初始化方法的定义语法和用法
  class Car:
    '''此类为小汽车类'''
    def __init__(self, c, b, m):
      self.color = c # 颜色
      self.brand = b # 品牌
      self.model = m # 型号
      print('Car类的__init__被调用')


    def run(self, speed):
      print(self.color, '',self.brand, self.model,'正在以', speed,'公里/小时的速度行驶')


  c1 = Car('红色', '奥迪', 'A4')
  c1.run(299)


  c2 = Car('白色', 'BYD', '秦EV Pro')
  c2.run(119)
View Code

析构方法
  del __del__(self):
    ...
  析构方法在对象被销毁前被自动调用
  python语言不建议在对象销毁时做任何事情,因为销毁的时间难以确定

  # 此示例示意析构方法的定义方式和用法
  class Car:
    def __init__(self, info):
      self.info = info
      self.file = open('mydel.txt','w')
      print("汽车", self.info, '被创建')

    def __del__(self): # 析构方法
      print('汽车', self.info, '被销毁')
      self.file.close() # 关闭文件

  c1 = Car('BYD E6')
  del c1
  input('请输入回车键继续:')
  print("程序退出")
View Code

预置实例属性
  __dict__属性
    __dict__属性绑定一个存储此实例自身属性的字典

  示例:
    class Dog:
      pass
    dog1 = Dog()
    print(dog1.__dict__) # {}
    dog1.color = '白色'
    print(dog1.__dict__) #{'color':'白色'}
View Code

__class__属性
  __class__属性绑定创建此实例的类
  作用:
    可以借助于此属性来访问创建此实例的类

  # 此示例示意 __class__属性的作用
  class Dog:
    pass

  dog1 = Dog()

  print(dog1.__class__) # __class__绑定Dog类
  print(Dog) # 等同于上句
  dog2 = dog1.__class__() # 等同于dog2=Dog()
View Code

 

用于类的函数:
  isinstance(obj, class_or_tuple) 返回这个对象obj是否是某个类的对象或某些类中一个类的对象,如果是则返回True,否则返回False
  type(obj) 返回对象的类

 

posted @ 2019-03-31 20:48  你厉害。  阅读(241)  评论(0编辑  收藏  举报