当前位置:

首页 > 编程开发 > Python类的基本使用方法及注意事项

Python类的基本使用方法及注意事项

1、面向对象类(class):是一种用来描述具有相同属性和方法的对象的集合。类变量:类变量在整个实例化的对象中是公用的。一般定义在类中且在函数体之外。方法:类中的函数数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。局部变量:定义在方法中的变量,只作用于当前实例的类。实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用self修饰

本文目录

    1、面向对象

    类(class):是一种用来描述具有相同属性和方法的对象的集合。

    类变量:类变量在整个实例化的对象中是公用的。一般定义在类中且在函数体之外。

    方法:类中的函数

    数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。

    方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

    局部变量:定义在方法中的变量,只作用于当前实例的类。

    实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。

    继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。就像我们定义一个fruit(水果)类,然后又定义了一个fruit类的派生类apple(苹果),它有着fruit类的一些属性和方法,也有着自己的一些独特的属性和方法,和fruit类是一种’is-a’的关系。

    实例化:类的一个具体对象,类像当于一个模板,只有我们将其实例化为一个对象后才能对其进行相应的操作。

    对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。


    2、类定义

    定义一个类:

    class ClassName:....    ....    ....

    类名建议采用驼峰式命名,或者全部大写字母


    3、使用类对象方法

    类对象支持两种操作:属性引用和实例化

    属性引用:和python中的其他语法一样,obj.name

    在类中带__的属性为类的私有属性,私有属性在类外部无法直接访问,像__name.

    class Fruit:#这是类的一个基本属性self.number = 100def get_number(self):                a = self.number + 100return a
    
    f = Fruit()print('We have {0} fruits'.format(f.number))print('We have {0} fruits'.format(f.get_number()))

    输出结果:

    We have 100 fruitsWe have 200 fruits

    4、构造方法

    python类中有一个名为__init__()的特殊方法,叫构造方法,该方法在类进行实例化时会自动进行调用(可以用于类属性初始化等),类似C++里面类的构造函数。

    def __init__(self):self.data = []

    类定义了 __init__() 方法,类的实例化操作会自动调用__init__()方法。

    class Fruit:def __init__(self):                print('你已经实例化了一个对象')
    f = Fruit()

    输出结果

    你已经实例化了一个对象

    init_() 方法可以有参数,参数通过 init() 传递到类的实例化操作上。

    class Complex:def __init__(self,real,image):self.r = realself.i = imagedef get_complex(self):                print('complex real is %.2f , image is %.2f'%(self.r,self.i))
    a = Complex(3.5,-3)a.get_complex()

    输出结果如下:

    complex real is 3.50 , image is -3.00

    self代表类的实例,而非类。类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。但self并不是Python中的关键字哦。

    不知是否可以这样理解,self就代表的是你按照一个类实例化一个对象后的对象的地址。很像C++类中this指针

    class Test:def prt(self):        print(self)        print(self.__class__)
    t = Test()t.prt()

    输出:

    <__main__.Test object at 0x0000025EC6D45608>

    5、类的方法

    在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数。如果不需要self传递参数,需要在函数前面加上@staticmethod,表示静态方法

    class Complex:def __init__(self, real=None, image=None):self.r = realself.i = image
    def get_complex(self):        print('complex real is %.2f , image is %.2f' % (self.r, self.i))
        @staticmethoddef test(a, b):        print('complex real is %.2f , image is %.2f' % (a, b))
    
    a = Complex(3.5, -3)a.get_complex()
    b = Complex()b.test(3, -2)

    输出结果

    complex real is 3.50 , image is -3.00complex real is 3.00 , image is -3.00

    6、继承

    Python 同样支持类的继承,格式如下:

    class Derivedclassname(Baseclassname):    ...    ...

    Baseclassname(基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用:

    class Fruit:    def __init__(self,sweet):        self.sweetness = sweet    def describe(self):        print('Our fruit has a sweetness of %.2f'%self.sweetness)
    class Apple(Fruit):#单继承,继承fruit类    def __init__(self,sweet,color):        self.color = color        Fruit.__init__(self,sweet)    def describe(self):#改写基类fruit的方法        print('Our apple has a sweetness of {0:.2f}%,and color is {1}'.format(self.sweetness,self.color))
    
    apple = Apple(62.2,'red')apple.describe()

    输出:

    Our apple has a sweetness of 62.20%,and color is red

    多继承

    Python同样可以继承多个基类:

    class Derivedclassname(basename1,basename2,...):    ...    ...    ...

    需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法。

    class Fruit:def __init__(self, sweet):        self.sweetness = sweetdef describe(self):        print('Our fruit has a sweetness of %.2f' % self.sweetness)
    
    class Food:def __init__(self, uprice, num):        self.unit_price = uprice        self.number = num        self.total_price = num * upricedef cost(self):        print('You need to pay {0:.3} yuan, thank you'.format(self.total_price))
    
    class Apple(Fruit, Food):def __init__(self, sweet, color, uprice, num):        self.color = color        Fruit.__init__(self, sweet)        Food.__init__(self, uprice, num)def describe(self):        print('Our fruit has a sweetness of {0:.2f}%,and color is {1}'.format(self.sweetness, self.color))
    apple = Apple(62.2,'red',3.5,21)apple.describe()apple.cost()

    输出:

    Our fruit has a sweetness of 62.20%,and color is redYou need to pay 73.5 yuan, thank you

    7、方法重写

    如果父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法,如果想调用已经被覆盖的基类方法,可以用super(子类名,子类实例对象名).父类方法

    class Parent_class:def Method(self):         print ('父类方法')
    
    class Child_class(Parent_class): # 定义子类def Method(self):        print ('子类方法')
    
    c = Child_class()                # 子类实例化c.Method()                  # 子类调用重写方法super(Child_class,c).Method()    #用子类对象调用父类已被覆盖的方法

    子类继承父类构造函数

    如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。

    class A:def __init__(self, x, y):        self.x = x        self.y = y        print('pos is ({0},{1})'.format(self.x, self.y))
    def xxx(self):        print('parent now')
    
    class B(A):def xxx(self):        print('child now')
    
    b = B(10, 3)b.xxx()

    输出

    pos is (10,3)child now

    如果重写了__init__ 时,实例化子类,就不会调用父类已经定义的 __init__。

    如果重写了__init__ 时,要继承父类的构造方法,可以使用 super 关键字super(子类,self).__init__(参数1,参数2,....),或者父类名称.__init__(self,参数1,参数2,...)


    8、类的私有属性

    两个下划线开头,声明该属性为私有,像__name不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__name。

    class JustCounter:     __secretCount = 0  # 私有变量    publicCount = 0  # 公开变量
    def count(self):        self.__secretCount += 1        self.publicCount += 1       print(self.__secretCount)
    
    counter = JustCounter()counter.count()counter.count()print(counter.publicCount)print(counter.__secretCount)  # 报错,实例不能访问私有变量
    Traceback (most recent call last):File "test.py", line 16, in     print (counter.__secretCount)  # 报错,实例不能访问私有变量AttributeError: 'JustCounter' object has no attribute '__secretCount'

    两个下划线开头,声明该方法为私有方法,像__private_method,只能在类的内部调用 ,不能在类的外部调用。self.___private_method。

    class Site:def __init__(self, name, url):        self.name = name  # public        self.__url = url  # private
    def who(self):        print('name  : ', self.name)        print('url : ', self.__url)
    def __foo(self):  # 私有方法        print('这是私有方法')
    def foo(self):  # 公共方法        print('这是公共方法')        self.__foo()
    
    x = Site('***', 'www.xxx.com')x.who() # 正常输出x.foo() # 正常输出x.__foo()  # 报错

    输出:

    '''name  :  ***url :  www.***.com这是公共方法这是私有方法Traceback (most recent call last):  File "F:\Python\Program\test.py", line 61, in     x.__foo()      # 报错AttributeError: 'Site' object has no attribute '__foo''''

    类的专有方法

    __init__ : 构造函数,在生成对象时调用,类似C++构造函数

    __del__: 析构函数,释放对象时使用,类似C++析构函数,常用在释放申请的内存空间

    __repr__: 打印,转换。这个个函数就是在打印类的时候,控制类输出的字符串

    class Name:def __init__(self, name):        self.name = name
    
    print(Name('s'))
    '''<__main__.Name object at 0x0000023744AFD248>'''
    class Name:def __init__(self,name):        self.name = name
    def __repr__(self): #控制了在打印类时候的输出          return 'Name({!r})'.format(self.name)
    
    print(Name('s'))
    '''Name('s')'''

    __setitem__ : 每当属性被赋值的时候都会调用该方法,因此不能再该方法内赋值 self.name = value 会死循环

    __getitem__: 当访问不存在的属性时会调用该方法

    __len__: 获得长度,如果一个类表现得像一个list,要获取有多少个元素,就得用len() 函数。要让len()函数工作正常,类必须提供一个特殊方法__len__(),它返回元素的个数。

    class CountList:def __init__(self, *args):        self.list = [x for x in args]        self.count = self.__len__()
    def __len__(self):         return len(self.list)
    def get_count(self):         return self.count
    
    a = CountList(1, 2, 3, 4, 4, 5)print(a.get_count())print(len(a))

    __cmp__: 比较运算

    __call__: 函数调用

    __add__: 加运算

    __sub__: 减运算

    class MyClass:
    def __init__(self, height, weight):        self.height = height        self.weight = weight
    # 两个对象的长相加,宽不变.返回一个新的类def __add__(self, others):        return MyClass(self.height + others.height, self.weight + others.weight)
    # 两个对象的宽相减,长不变.返回一个新的类def __sub__(self, others):        return MyClass(self.height - others.height, self.weight - others.weight)
    # 说一下自己的参数def intro(self):        print("高为", self.height, " 重为", self.weight)
    
    def main():    a = MyClass(height=10, weight=5)    a.intro()
        b = MyClass(height=20, weight=10)    b.intro()
        c = b - a    c.intro()
        d = a + b    d.intro()
    
    if __name__ == '__main__':    main()
    '''高为 10  重为 5高为 20  重为 10高为 10  重为 5高为 30  重为 15'''

    __mul__: 乘运算

    __truediv__: 除运算

    __mod__: 求余运算

    __pow__: 乘方

    同样的。类的专有方法也可以重写

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Python
    相关文章 更多
    python删除一个列表里的重复元素的方法与代码示例
    python删除一个列表里的重复元素的方法与代码示例

    学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

    Python写接口的步骤及完整代码示例
    Python写接口的步骤及完整代码示例

    详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

    codex怎么读取word文档及docx文件操作教程
    codex怎么读取word文档及docx文件操作教程

    介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

    怎么在Python中调用C语言代码提升性能
    怎么在Python中调用C语言代码提升性能

    详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

    Python与C语言的性能差异及底层原理
    Python与C语言的性能差异及底层原理

    深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

    Python和C语言哪个更适合编程入门
    Python和C语言哪个更适合编程入门

    客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    langgraph python guide中文入门教程详解
    langgraph python guide中文入门教程详解

    本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

    Windows 安装 Python:从官方入口到虚拟环境的可复现实践
    Windows 安装 Python:从官方入口到虚拟环境的可复现实践

    面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。