第十二章 python 类 - 面向对象的程序设计

本文介绍了 Python 中面向对象的程序设计,包括类的定义与使用、访问权限(封装)、继承、多型、多重继承以及特殊属性和方法。详细阐述了如何定义和操作类的属性与方法,以及如何通过构造函数初始化对象。同时讨论了私有属性和方法,类的继承关系,以及多型的概念。文章还提到了 `__init__`、`__str__`、`__repr__` 等特殊方法的作用。
摘要由CSDN通过智能技术生成

第十二章 python 类 - 面向对象的程序设计

12-1 类的定义与使用

  • 类的语法定义如下:

    • class Classname() # 类名称第一个字母必须大写

      ​ statement1

      ​ …

      ​ statementn

  • 本节将以银行为例,说明最基本的类观念。

12-1-1 定义类
  • 例:Banks 的类定义

    class Banks():
        # 定义银行类别
        title = "Taipei Bank"      # 定义属性
        def motto(self):           # 定义方法
            return "以客为尊"
        
    #输出结果(这个程序没有输出结果)
    
  • 对上述程序而言,Banks 是类名称,在这个类中笔者定义了一个属性 title 与一个方法 motto 。

  • 在类内定义方法的方式与第 11 章定义函数的方式相同,但是不可以称之为函数,必须称之为方法,在程序设计时我们可以随时调用函数,但是只有属于该类的对象才可调用相关的方法。

12-1-2 操作类的属性与方法
  • 若是想操作类的属性与方法首先需定义该类的对象变量,可以简称对象,然后使用下列方式操作。

    • object . 类的属性
    • object . 类的方法 ( )
  • 例:扩充上例,列出银行名称与服务宗旨。

    class Banks():
        # 定义银行类别
        title = "Taipei Bank"      # 定义属性
        def motto(self):           # 定义方法
            return "以客为尊"
    userbank = Banks()              # 定义对象 userbank
    print("目前的服务银行是:",userbank.title)
    print("银行的理念是    :",userbank.motto())
    
    #输出结果
    目前的服务银行是: Taipei Bank
    银行的理念是    : 以客为尊
    
  • 从上述执行结果可以发现我们成功地存取了 Banks 类内的属性与方法了。上述程序观念是,程序第 6 行定义了 userbank 当作是 Banks 类的对象,然后使用 userbank 对象读取了 Banks类内的 title 属性与 motto() 方法。这个程序主要是列出 title 属性值与 motto() 方法传回的内容。

12-1-3 类的构造函数
  • 建立类很重要的一个工作是初始化整个类,所谓的初始化类是在类内建立一个初始化方法,这是一个特殊方法,当在程序内定义这个类的对象时将自动执行这个方法。初始化方法有一个固定名称是“ __init__ ( ) ”,写法是 init 左右皆是 2 个底线字符,init 其实是 initalization 的缩写,通常又将这类初始化的方法称构造函数。在这初始化的方法内可以执行一些属性变量设定,下列笔者先用一个实例做解说。

  • 例:设定初始化方法,同时存第一笔开户的钱 100 元入银行,然后列出存款金额。

    class Banks():
        # 定义银行类别
        title = "Taipei Bank"             # 定义属性
        def __init__(self,uname,money):  # 初始化方法
            self.name = uname            # 设定存款者名字
            self.balance = money         # 设定所存的钱
            
        def get_balance(self):          # 获得存款金额
            return self.balance
        
    hungbank = Banks("张三",100)
    print(hungbank.name.title(),"存款余额是:",hungbank.get_balance())
    
    #输出结果
    张三 存款余额是: 100
    
  • 上述在程序 11 行定义 Banks 类的 hungbank 对象时,Banks 类会自动启动 __init__( ) 初始化函数,在这个定义中 self 是必需的,同时需放在所有参数的最前面(相当于最左边),Python 在初始化时会自动传入这个参数 self,代表是类本身的对象,未来在类内想要参照各属性与函数搪行运算皆要使用 self,可参考第 5、6、10 行。

  • 在这个 Banks 类的 __init__( self , uname,money ) 方法中,有另外 2 个参数 uname 和 money,未来我们在定义 Banks 类的对象时需传递 2 个参数,分别给 uname 和 money。至于程序第 5、6行内容如下:

    • self . name = uname # name 是 Banks 类的属性
    • slef . balance = money # balance 是 Banks 类的属性
  • 读者可能会思考,既然 __init__( ) 这么重要,为何一些例子没有这个初始化函数仍可运行,其实是使用预设没有参数的 __init__( ) 方法。

  • 在程序第 8 行另外有一个 get_balance ( self ) 方法,在这个方法内只有一个参数 self,所以调用时可以不用任何参数,可以参考第 12 行。这个方法目的是传回存款余额。

  • 例:增加执行存款与提款功能,同时在类内在以直接列出目前余额。

    class Banks():
        # 定义银行类别
        title = "Taipei Bank"             # 定义属性
        def __init__(self,uname,money):  # 初始化方法
            self.name = uname            # 设定存款者名字
            self.balance = money         # 设定所存的钱
        
        def save_money(self,money):      # 设计存款方式
            self.balance += money       #  执行存款
            print("存款:" ,money," 完成")
            
        def withdraw_money(self,money):  #设计提款方式
            self.balance -= money
            print("提款:",money," 完成")
            
        def get_balance(self):
            print(self.name.title(),"目前余额",self.balance)
            
    hungbank = Banks("张三",100)   # 实例化对象 
    hungbank.get_balance()     
    hungbank.save_money(300)
    hungbank.get_balance()  
    hungbank.withdraw_money(200)
    hungbank.get_balance()
    
    #输出结果
    张三 目前余额 100
    存款: 300  完成
    张三 目前余额 400
    提款: 200  完成
    张三 目前余额 200
    
  • 其实类建立完成了,我们随时可以使用多个对象引用这个类的属性与函数,可参考下列实例。

  • 例:上面例子,定义 2 个对象使用操作这个类

    class Banks():
        # 定义银行类别
        title = "Taipei Bank"             # 定义属性
        def __init__(self,uname,money):  # 初始化方法
            self.name = uname            # 设定存款者名字
            self.balance = money         # 设定所存的钱
        
        def save_money(self,money):      # 设计存款方式
            self.balance += money       #  执行存款
            print("存款:" ,money," 完成")
            
        def withdraw_money(self,money):  #设计提款方式
            self.balance -= money
            print("提款:",money," 完成")
            
        def get_balance(self):
            print(self.name.title(),"目前余额",self.balance)
            
    hungbank = Banks("张三",100)
    johnbank = Banks("李四",300)
    hungbank.get_balance()
    johnbank.get_balance()
    hungbank.save_money(100)
    johnbank.withdraw_money(150)
    hungbank.get_balance()
    johnbank.get_balance()
    
    #输出结果
    张三 目前余额 100
    李四 目前余额 300
    存款: 100  完成
    提款: 150  完成
    张三 目前余额 200
    李四 目前余额 150
    
12-1-4 属性初始值的设定
  • 在先前程序的 Banks 类中第 3 行 title 是设为 “ Taipei Bank ”,其实这是初始值的设定,通常 Python 在设初始值时是将初始值设在 __init__( ) 方法内,下列这个程序定义 Banks 类对象时,省略开户金额,相当于定义 Banks 类对象时只要 2 个参数。

  • 例:设定开户只要姓名,同时设定开户金额是 0 元,读者可留意第 5 和 6 行的设定。

    class Banks():
        
        def __init__(self,uname):    #初始化方法
            self.name = uname
            self.balance = 0
            self.title = "Taipei Bank"
            
        def save_money(self,money):      # 设计存款方式
            self.balance += money       #  执行存款
            print("存款:" ,money," 完成")
            
        def withdraw_money(self,money):  #设计提款方式
            self.balance -= money
            print("提款:",money," 完成")
            
        def get_balance(self):
            print(self.name.title(),"目前余额",self.balance)
            
    hungbank = Banks("张三")
    print("目前开户银行",hungbank.title)
    hungbank.get_balance()
    hungbank.save_money(100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值