python面向对象

本文介绍了面向对象编程的基本概念,如对象、类和实例,强调了多态、继承和封装的核心特性。通过Python代码示例展示了多态如何通过公共接口实现,以及继承如何提高代码复用。同时,文章还讨论了封装的重要性,即隐藏实现细节,使用户更专注于如何使用类。最后,文章探讨了面向对象编程在大型项目中的优势,特别是在代码维护和项目迭代方面。
摘要由CSDN通过智能技术生成

1.面向对象(Objetct Oriented Programming):

 

(百度百科)面向对象程序设计方法是尽可能模拟人类的思维方式,以对象为核心,该方法认为程序由一系列对象组成。

(简单来说就是,什么人做什么事)

2.面向对象的三个特点:多态、继承、封装

2.1多态 :指同一种事物的不同形态,公共接口

特点:增加 了代码的灵活性,减少代码冗余

# python崇尚鸭子类型:一只鸟,走路像鸭子,游泳像鸭子,那么他就是鸭子
# 鸭子类型,只关注对象的属性,不关注他的本质


class PAY:
    pass

class ZHIFUBAO(PAY):
    name = "zhifubao"

    def pay(self):
        print("this is zhifubaopay")


class WEIXIN(PAY):
    name = "weixin"

    def pay(self):
        print("this is weixinpay")


z1 = ZHIFUBAO()
w1 = WEIXIN()


def moneypay(obj):
    print(f"this is {obj.name}")
    obj.pay()


moneypay(z1)
moneypay(w1)

# moneypay就是一个公共接口

2.2 继承 :子类可以继承父类的一切属性和方法,继承的目的是为了提高代码的复用率

class A:
    def __init__(self, count):
        self.name = "class A"
        print(f"this is a.count {count}")

    def sum(self, a, b):
        print(a+b)



# 定义一个A的子类B
class B(A):
    print("this is B")
    # 执行完print后就会调取A的init函数 


# B继承了A的所有属性和方法
# B没有init函数,会自动取调用A的init函数,

# B实例化对象的时候也要传一个参数,不然就会报错,缺少一个必要的值
b = B("1")
b.sum(1, 2)

# this is B
# this is a.count 1
# 3


# 一个类可以同时继承多个类,也可以继承多重类
# 定义一个B的子类C,C不仅继承了b的所有属性和方法,也继承了A的所有属性和方法
class C:
    def __init__(self, count):
        # c想要重写init函数,但是也想拥有A的init函数的属性时就可以调用super方法
        # 最好将super方法写在定义方法的下一排,避免修改的属性被重写
        super().__init__(count)
        print("this is c.init")
c = C("1")

        

2.3 封装 :将属性和方法封装成类,用户不需要关心如何实现的功能,只需要关心如何去使用这个类

# 类型的判断,适用于所有判断
# 判断实例化对象是否属于一个类
# print(isinstance(a, A))

# 判断100是否是int型数据
# print(isinstance(100, int))

3.类的定义

定义类的时候我们呢一般以大驼峰的形式,每一个单词首字母大写

定义方法的时候我们多以下划线的方式来隔开每一个单词

# 类:具有相同属性或方法的集合
# 属性:描述对象的具体信息
# 方法:具备的功能
# 对象:一个实例,某个类实例化后的结构体

# 类的定义:
class User:
    # 属性
    name = "xiaoyu"
    country = "China"
    # 方法
    def money(self,balance):
        self.balance = balance
        print(f"xiaoyu现在有{self.balance}元")

# 实例化对象
user1 = User()
        
# A 和A() 是两个类
class A():
    def info(self):
        print("hello")
print(f"A().id is {id(A())}")
print(f"A().id is {id(A)}")

# A().id is 2494555864896
# A().id is 2494557331024

(定义类的时候最好不要加括号)

现在我们以一个银行的例子,一起走进面向对象的世界:

1.首先我们定义了一个银行类:它有info、country、total_money这三个属性和store_Money(存钱)的方法,我们实例化了两个ATM类的对象,分别是A1和a2,我们的系统在生成这两个对象的时候同时在内存里为这两个对象分别开辟了一块内存空间,存放对象的属性。

实例化虽然调用了类,但是如果没有基于类属性或者类方法执行一些命令,实例的内存空间不存放任何东西。

实例查找属性时: 1.先在自己的内存空间查找内容 2.如果没有找到就去类空间查找属性 3.如果类空间还是没有这个属性就去父类空间找 4.如果父类空间还是找不到这个属性就去父亲的父亲的空间查找,直到找到最上一层的基类

实例可以访问类空间的属性和方法,但是不能通过实例,修改类空间的值

4.我们为什么要从面向过程过渡到面向对象:

面向过程适合于小项目开发,项目不需要太多的维护,并且没有项目迭代的时候使用。但是如果你要设计一个较大的项目,并且项目迭代跟新比较频繁的话采用面向对象的方式编程会提高很大的效率,同时也较少了成本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值