Skr-Eric的Python课堂(十九)——Python的面向对象编程

  面向对象编程   Object-Oriented Programming

 

什么是对象:

  对象是指现实中的物体或实体

 

什么是面向对象:

  把一切看成对象(实例), 用各种对象之间的关系来描述事务

 

对象的特征

  1. 对象有很多属性(名词或形容词)

    年龄,姓名,性别 ...

  2. 对象有很多行为(动作,动词)

    学习,吃饭,睡觉,踢球,工作...

  

什么是类:

  拥有相同属性和行为的对象分为一组,即为一个类

  类是用来描述对象的工具,用类可以创建此类的对象(实例)

 

类和对象示意

  车(类)  ----->> BYD  E6(京A.88888) 实例,对象

        \

         \---->> BWM X5(京B.00000)   实例,对象

 

  狗(类) -----> 哈士奇(户籍号: 00001)

       \

        \-----> 导盲犬(户籍号:00002)  对象

 

  int(类)  -----> 100 (对象)

        \

         \ -----> 200 (对象)

 

类的创建语句 class 语句

  语法:

    class 类名(继承列表):

        '''类文档字符串'''

        实例方法定义

        类变量定义

        类方法定义(@classmethod)

        静态方法定义(@staticmethod)

  作用:

    创建一个类

    类用于描述对象的行为和属性

    类用于创建此类的一个或多个对象(实例)

  说明:

    类名必须为标识符(与变量名命名规则相同,建议首字母大写)

    类名实质上就是变量,它绑定一个类

  示例:

class Dog:
    '''创建一个Dog类,此类用于描述一种
    小动物的行为和属性'''
    pass

dog1 = Dog()  # 创建Dog类的一个实例
print(id(dog1))
dog2 = Dog()  # 创建Dog类的第二个实例
print(id(dog2))
print('--------------------')
# 对比
lst1 = list()  # 创建一个空列表
print(id(lst1))
lst2 = list()  # 创建另一个空列表
print(id(lst2))

 

构造函数

  构造函数调用表达式:

    类名([创建传参列表])

 

  作用:

    创建这个类的实例对象,并返回此实例对象的引用关系

  说明:

    实例有自己的作用域和名字空间,可以为该实例添加实例变量(也叫属性)

    实例诃以调用类方法和实例方法

    实例可以访问类变量和实例变量

 

实例方法(method)

  语法:

    class 类名(继承列表):

        def 实例方法名(self, 形参名1, 形参名2, ....):

            '方法文档字符串'

            语句块

  作用:

    用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为

  说明:

    实例方法的实质是函数,是定义在类内的函数

    实例方法至少有一个形参,第一个形参用来绑定调用这个方法的实例,一般命名为'self'

 

实例方法的调用语法:

  实例.实例方法名(调用传参)

  # 或

  类名.实例方法名(实例, 调用传参)

  示例:

# 此示例示意实例方法的定义和调用
class Dog:
    '''创建一个Dog类,此类用于描述一种
    小动物的行为和属性'''
    def eat(self, food):
        '''此方法用来描述小狗吃东西的行为'''
        print("id为:", id(self), '的小狗正在吃', food)
    def sleep(self, hour):
        print("小狗睡了", hour, '小时')
    def play(self, obj):
        print("小狗正玩", obj)

dog1 = Dog()  # 创建一个小狗对象
dog1.eat('骨头')
dog1.sleep(1)
dog1.play('球')
dog2 = Dog()  # 创建另外一只狗对象
dog2.eat('狗粮')
dog2.sleep(3)
dog2.play('飞盘')

 

实例属性 atrribute(也叫实例变量)

  每个实例可以有自己的变量用来保存对象自己的数据, 称为实例变量(也叫属性)

 

  语法:

    实例.属性名

 

  赋值规则同变量的赋值规则

    首次为属性赋值则创建此属性

    再次为属性赋值则改变属性的绑定关系

  作用:

    记录每个对象自身的数据

  示例:

# 此示例示意为对象添加实例变量(实例属性)及访问实例变量(实例属性)
class Dog:
    def eat(self, food):
        print(self.color, '的', self.kinds,
              '正在吃', food)
        self.last_food = food

    def show_last_food(self):
        print(self.color, '的', self.kinds,
              '上次吃的是', self.last_food)

dog1 = Dog()
dog1.kinds = '京巴'  # 添加实例属性
dog1.color = '白色'  # 添加
dog1.color = '黄色'  # 修改实例属性的绑定关系
dog2 = Dog()  # 另一个对象
dog2.kinds = '藏獒'
dog2.color = '棕色'
print(dog1.color, '的', dog1.kinds)
print(dog2.color, '的', dog2.kinds)
dog1.eat('骨头')
# dog1.last_food = '骨头'
dog2.eat('窝头')
# dog1.last_food = '窝头'
dog1.show_last_food()
dog2.show_last_food()

  

del语句

  可以删除对象(实例)的属性

  

  语法:

    del 对象.实例变量名

 

  示例:

class Dog:
    pass
dog1 = Dog()
dog1.color = '白色'
print(dog1.color)  # 白色 
del dog1.color  # 删除属性
print(dog1.color)  # AttributeError属性错误

del 语句小结:

   1) 删除变量       del name

   2) 删除列表的元素  del L[1], del L[::2]

   3) 删除字典的键    del d['name']

   4) 删除对象的属性   del dog1.color

 

初始化方法

作用:

    对新创建的对象添加属性

  语法格式:

    class 类名(继承列表):

        def __init__(self, [形参列表]):

            语句块

    注: [] 代表其中的内容可省略

  说明:

    1. 初始化方法名必须为 '__init__' 不可改变

    2. 初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self 传入 __init__ 方法

    3. 构造函数的实参将通过 __init__方法的参数列表传入到__init__方法中

    4. 实始化方法内如果需要return 语句返回,则只能返回None

  示例:

# 此示例示意初始化方法的定义,及用初始化方法对新建对象添加属性
class Car:
    '''小汽车类'''
    def __init__(self, c, b, m):
        self.color = c  # 颜色
        self.brand = b  # 品牌
        self.model = m  # 形号
        # print("初始化方法被调用")

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

a4 = Car('红色', '奥迪', 'A4')
a4.run(199)
t1 = Car("蓝色", "TESLA", 'Model S')
t1.run(230)

 

析构方法:

  class 类名(继承列表):

      def __del__(self):

          语句块

 

  析构方法在对象被销毁时被自动调用

  python语言建议不要在对象销毁时做任何事情,因为销毁时间难以确定

  示例:

# 此示例示意析构方法的使用
class Car:
    def __init__(self, info):
        self.info = info
        print("汽车对象", info, '被创建')

    def __del__(self):
        print("汽车对象", self.info, '被销毁')

c1 = Car("BYD E6")
# c1 = None  # 改变变量的绑定关系可以释放 BYD E6对象
del c1  # 删除变量,释放对象
L = []
L.append(Car("汽车1"))
L.append(Car("汽车2"))
L.append(Car("汽车3"))
del L  # 释放列表
input("请输入回车键继续执行程序: ")
print("程序退出")

 

预置实例属性

  __dict__属性

    __dict__属性绑定一个存储此实例自身变量字典

 

  示例:

class Dog:
    pass
dog1 = Dog()
print(dog1.__dict__)  # {}
dog1.color = "白色"
print(dog1.__dict__)  # {'color': '白色'}
dog1.kinds = '京巴'
print(dog1.__dict__)  # {'color': '白色', 'kinds':'京巴'}

 

  __class__属性

    '__class__' 属性绑定创建此实例的类

    作用:

      可以借助此属性来访问创建此实例的类

    示例:

class Dog:
    pass
dog1 = Dog()
print(dog1.__class__)
dog2 = dog1.__class__()
print(dog2.__class__)

用于类的函数:

  isinstance(obj, class_or_tuple)  返回这个对象obj是否是某个类的对象或者某些类中的一个类的对象,如果是则返回True, 否则返回 False

  type(obj)  返回对象的类型

 

今天没有作业~吼吼吼~~~

 

 

想要看更多的课程请微信关注SkrEric的编程课堂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值