0
点赞
收藏
分享

微信扫一扫

Python 面向对象编程(一)

小龟老师 2021-09-29 阅读 64

一. 面向对象编程

什么是对象?
对象是指现实中的物体或实物。

什么是面向对象?
把一切看成对象(实例),用各种对象之间的关系来描述实物。

对象都有什么特征?

  • 对象有很多属性(名词):可以通过实例访问的变量称为属性,如:姓名,性别,年龄等;
  • 对象有很多行为(动作):学习,吃饭,睡觉等。

面向对象的最大优势?
每个对象可以管理自己的资源。

二. 什么是类

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

语法:

class 类名(继承列表):
    '''类文档字符串'''
    实例方法定义
    类变量定义
    类方法定义(@classmethod)
    静态方法定义(@staticmethod)

作用:

  • 创建一个类;
  • 用于描述对象的行为和属性;
  • 用于创建此类的一个或多个同类对象(实例)。

说明:

  • 继承列表可以省略,省略继承列表表示此类继承自 Object
  • 类名必须为标识符;
  • 类名实质是个变量,绑定一个类。

三. 实例方法和实例属性

语法:

class 类名(继承列表):
    def 实例方法(self, 形参1, 形参2, ...):
        '''方法的文档字符串'''
        语句块

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

说明:

  • 实例方法的实质是函数,是定义在类内的函数;
  • 实例方法至少有一个形参,第一个形参代表调用这个方法的实例,一般命名为 self

实例方法的调用语法:

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

实例属性:
每个实例可以使用自己的变量,称为实例变量(也叫属性)。

使用语法:
实例.属性名

属性的赋值规则:
首次为属性赋值则创建属性,再次为属性赋值则改变属性的绑定关系;

作用:
记录每个对象自身的数据;

删除属性:
del 对象.属性名

四. 构造函数

构造函数调用表达式:
类名([创建传参列表])

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

说明:

  • 实例有自己的作用域和名字空间,可以为该实例添加实例变量(也叫属性);
  • 实例可以调用类方法和实例方法;
  • 实例可以访问类变量和实例变量。

五. 初始化方法

作用:
对新创建的对象添加属性等初始化操作;

语法格式:

class 类名(继承列表)
    def __init__(self[,形参列表])
        语句块

注:[] 里的内容代表可省略。

说明:

  • 初始化方法名必须为 __init__ 不可改变;
  • 初始化方法会在构造函数创建实例后自动调用;
  • 构造函数的实例将通过 __init__ 方法的参数列表传入到 __init__ 方法中;
  • 初始化方法内如果需要 return 语句返回,则只能返回 None

六. 析构方法

语法:

class 类名(继承列表):
    def __del__(self):
        语句块

作用:
通常用来释放此对象占用的资源;

说明:
析构方法会在对象被销毁时自动调用。

注:Python 语句建议不要在对象销毁时做任何事情,因为对象销毁的时间难以确定。

示例析构方法和初始化方法的使用:

class Car:
    def __init__(self, name):
        self.name = name
        print('汽车', name, '对象被创建')
 
    def __del__(self):
        print('汽车', self.name, '对象被销毁')

运行结果:

>> car = Car('BYD E6')
汽车 BYD E6 对象被创建
>> L = list()
>> L.append(car)
>> car
<__main__.Car at 0x2ce812860d0>
>> car = None
>> L[0]
<__main__.Car at 0x2ce812860d0>

七. 预置的实例属性

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

__class__ 属性:
绑定创建此实例的类(类实例),可以借助此属性来访问创建此实例的类。

八. 用于类的函数

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

type(obj)
返回对象的类。

示例 1:

>> assert isinstance(3.14, float)
>> assert isinstance('python', str)
>> class Dog:
...    pass
>> dog = Dog()
>> assert isinstance(dog, Dog)
>> assert type([1,2,3]) is list
>> assert [1,2,3].__class__ is list

示例 2:

"""此类用来描述学生信息,要求如下:

1. 为该类添加初始化方法,实现在创建对象时自动设置 姓名 年龄 成绩 属性;
2. 添加 set_score 方法,能为对象修改成绩信息,并限制成绩在 0-100 之间;
3. 添加 show_info 方法打印学生对象的信息。
"""
 
 
class Student:
    def __init__(self, name, age, score):
        """每当根据student类创建实例时,都将自动运行此方法"""
        self.name = name
        self.age = age
        self.score = score
 
    def set_score(self, score):
        """self实参将自动被传递,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法"""
        try:
            assert 0 <= score <= 100, '成绩有误,无法修改!'
            self.score = score
        except AssertionError as err:
            print(score, err)
 
    def show_info(self):
        print('%s今年%d岁,成绩是:%d' % (self.name, self.age, self.score))
 
 
if __name__ == "__main__":
    # 传递的参数由 __init__ 方法的形参决定
    s1 = Student('mia.li', 22, 99)
    s1.show_info()
 
    s1.set_score(100)
    s1.show_info()
 
    s1.set_score(200)
    s1.show_info()

运行结果:

举报

相关推荐

0 条评论