python — 面向对象【1】

本文介绍了面向对象编程的概念,包括类、对象、封装、继承和多态等核心概念。类是具有相同属性和方法的对象集合,而对象是类的具体实例。封装确保数据的安全性,继承实现代码重用,多态则允许接口有多种实现。通过实例展示了如何定义和使用类,并解释了__init__构造方法和__new__方法的作用。最后,提到了单例模式,即无论实例化多少次,都会返回相同的对象实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象

什么是面向对象

以前的编程我们把它称为“面向过程的编程”

重点在于:做什么

现在的编程我们把它称为“面向对象的编程”(oop)

重点在于:谁去做

用来描述具有相同属性或者方法的对象的集合

属性:对象的描述形象

方法:对象的行为

类的特性是:封装、继承、多态

封装

  • 在类中对数据的赋值、内部调用对外部用户是透明的

  • 把一些功能的实现细节不对外暴露

继承

  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。

  • 为实现代码的重用, 一个类可以派生出子类

  • 继承也允许把一个派生类的对象作为一个基类对象对待。

多态

  • 接口重用

  • 一个接口,多种实现(重写)

对象(实例)

具体的某个事物,实实在在的一个例子

实例化:创建一个类的实例

面向对象的优点

  • 迭代更新方便

  • 结构清晰、易于管理

class ATM():
    #属性
    money = 50000
    country = "China"
    bank = "gonghang"
    #方法
    def get_money(self,money):
        print(f"get money:{money}")
​
#实例化:创建一个类的实例
a1 = ATM()
a2 = ATM()
print(dir(a1))
#属性访问
print(a1.money,a2.country)
a1.get_money(500)

类的定义和使用

命令规范

一般首字母大写(大驼峰式命令)例如:Person,GoodsInfo

定义关键字:class

python2 ==》经典类,新式类

python3 ==》 新式类

python2显示object的类是新式类,没有就是经典类(python3默认是新式)

class A:
    pass
class B():
    pass
class C(object):
    pass

类空间和实例空间

class ATM():
    #属性
    money = 50000
    country = "China"
    bank = "gonghang"
    #方法
    def get_money(self,money):
        print(f"get money:{money}")
​
#实例化:创建一个类的实例
a1 = ATM()
a2 = ATM()
print(dir(a1))
#属性访问
print("实例访问".center(20,"*"))
print(a1.money,a2.country)
a1.get_money(500)
print("类访问".center(20,"*"))
print(ATM.money)
print("="*30)
a1.area = "hunan"
print(a1.area)
# print(a2.area)    #没有,上面只是a1添加了,但是ATM没有添加,所以a2没有,指针可以引用类空间,但是不能改变
ATM.color = "blue"    #ATM 添加了color所以a1和a2都会有
print(a1.color,a2.color)
​
#类空间 和 实例空间
print("类空间".center(30,"*"))
print(ATM.__dict__)
print("a1的空间".center(30,"*"))
print(a1.__dict__)
print("a2的空间".center(30,"*"))
print(a2.__dict__)
​
a1.money = 20000
print(a1.money,a2.money)
#实例只能引用类,不能改变类

类创建的时候会生成类空间

实例化对象生成实例空间,不同的实例之间,空间都是独立的

实例查找属性方法的时候,会先在实例空间查找,找不到就去类空间查找

类空间找不到,就去父类空间找

实例空间会有一个父对象指针,通过这个指针实例就可以访问类的属性方法了

 

__init__方法

实例对象的构造方法(初始化方法)

实例化对象的时候自动调用__init__方法

class ATM():
    #属性
    money = 50000
    country = "China"
    bank = "gonghang"
​
    def __init__(self,area):
        #实例属性
        self.area = area
    #方法
    def get_money(self,money):
        print(f"get money:{money}")
​
#实例化
atm1 = ATM("hunan")
atm2 = ATM("hubei")
print(atm1.area,atm2.area)

__new__方法

创建实例的方法 ,一般情况下不需要重写

总结

__new__是创建实例的方法 __init__是创建好的实例进行初始化的方法

__new__方法必须要传入一个参数(cls),代表当前类 __new__必须返回一个实例对象 __init__的self就表示__new__返回的实例,__init__在对这个实例进行初始化工作 子类没有定义__new__,就会找父类的__new__ 新式类才有__new__ 如果实例化对象和本身class不一致,__init__不会执行 __new__方法属于静态方法 __init__方法属于实例方法

单例模式

无论是实例化多少次,都返回同一个对象实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值