2024.4.9

本文详细介绍了Python中的面向对象编程概念,包括类、实例化、对象、数据成员(属性)、类属性与实例属性的区别,以及成员方法(构造方法、类方法和静态方法)的使用。特别强调了Python中动态修改、封装和不同类型的属性访问权限。
摘要由CSDN通过智能技术生成

Python面向对象

相关概念

类(Class): 可以理解为一个抽象的笼统的具有普遍性的制造对象的模板,里面定义了这个类所具有的数据成员和成员方法(定义在类中的函数).

实例化:以类为模板创建一个对象,在计算机内存中根据类的定义为对象开辟一片内存来储存信息

对象:通过类定义的数据结构实例,是类的具体对象。是满足类共性的同时,具有特性的个例.

数据成员(属性):理解为c结构体里的成员,不同的是,python里有两大类,一类叫类属性,一类叫实例属性

类属性:一般是定义在类中且在方法之外,是所有对象都共用的一个公共的属性,不同对象的类属性在内存中的地址是相同的.
如果类属性为可修改量,修改后所有对应的对象里的类属性都会改变------------这是因为对象对类属性的储存为引用储存(就是c里的指针)

实例属性:一般是定义在构造方法*init()*里面的属性,定义时要使用self作为前缀.是每一个对象独有的,不同对象的相同实例属性地址储存不同.实例属性只能通过对象访问,因为每个对象实例化是传递的参数不同,通过类访问肯定不知道访问哪个,所以只能通过对象访问

成员方法(method):类中定义的函数。定义时必须要自带一个参数self,根据不同分类可以分为不同几类

构造方法__init__():可以理解为为每一个对象实例化时的初始器,为对象添加了它自己独有的实例属性.而所有的构造函数的第一个参数都是self,这其实不是必须的,只是为了可读性这样写,它传递的是这个对象自己的内存地址,是自动添加的.而且,如果除了self还有别的参数,在实例化时就必须要有对应的参数,否则无法成功实例化对象

动态修改
python强大的功能使得我们可以动态的修改增添类属性和实例属性甚至方法
如上所述,我们可以修改类属性,使所有实例的类属性都发生改变,也可以单独修改实例属性,这样只有对应的对象修改了它的实例属性
动态添加方法在后面讲

共有 受保护 私有 预定义
在类中的属性分可以根据下划线的数量分不同的几类:

啥也没有,表示共有属性,谁都可以访问

*_xxx:表示受保护属性,这样的属性不会被import导入到其他文件中,在外面也可以访问,但是不推荐

*__xxx:表示私有属性,只能在类里访问,甚至子类也不能访问但是可以通过对象名._类名__私有属性名这样的特殊方式访问(不推荐)
评价为,封装了,但是如封

*xxx:表示系统应键预定义好的特殊成员,不能随意定义和增加,运算符重载用的多

实例方法
在python中默认就是实例方法,因为正常都是对对象操作
实例方法最大的特点就是,定义时最少也要包含一个 self 参数,用于绑定调用此方法的实例对象(Python 会自动完成绑定)

调用时,就是在对象.方法()时,自动就传递了一个self参数,把对象自己的地址传了过去,可以不写
当然,Python 也支持使用类名调用实例方法,但此方式需要手动给 self 参数传值。例如:

#类名调用实例方法,需手动给 self 参数传值
clang = CLanguage()
CLanguage.say(clang)

这里self很明显就是对象的地址了

同样的,实例方法也分共有和私有
共有就是正常定义,私有也是加俩下划线:
公有方法通过对象名直接调用“对象名.公有方法()”,私有方法不能通过对象名直接调用,只能在类里中进行调用或在外部通过特殊的形式来调用(间接调用)。

类方法
Python 类方法和实例方法相似,它最少也要包含一个参数,只不过类方法中通常将其命名为 cls,Python 会自动将类本身绑定给 cls 参数(注意,绑定的不是类对象)。也就是说,我们在调用类方法时,无需显式为 cls 参数传参。
和 self 一样,cls 参数的命名也不是规定的(可以随意命名),只是 Python 程序员约定俗称的习惯而已。

因为是类方法,所以肯定是对类属性操作码,so类方法中无法调用任何实例属性和实例方法。

类方法需要使用@classmethod修饰符进行修饰,类方法可以通过类名调用,也可以通过对象名调用

class CLanguage:
    #类构造方法,也属于实例方法
    def __init__(self):
        self.name = "C语言中文网"
        self.add = "http://c.biancheng.net"
    #下面定义了一个类方法
    @classmethod
    def info(cls):
        print("正在调用类方法",cls)

如果没有 @classmethod,则 Python 解释器会将 info() 方法认定为实例方法,而不是类方法
调用类方法就用----------类名.方法

静态方法
静态方法,其实就是我们学过的函数,和函数唯一的区别是,静态方法定义在类这个空间(类命名空间)中,而函数则定义在程序所在的空间(全局命名空间)中。

类的静态方法中无法调用任何实例属性和实例方法。

静态方法可以通过类名调用,也可以通过对象名调用,静态方法需要使用@staticmethod修饰,

class CLanguage:
    @staticmethod
    def info(name,add):
        print(name,add)

一般是需要用到类但是不会用到类里的成员和方法才会选择静态方法

  • 29
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值