私有属性和私有方法

本文详细解析了Python中私有属性和私有方法的实现原理,展示了如何在类继承中正确调用和重写父类的私有方法,并介绍了类属性的概念及其在实例中的调用方式。

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

私有属性

class Father(object):
    def __init__(self):
        self._name='王三'
        self.__money='800元'



    def costmoney(self):
        #访问私有属性
        print(self.__money)


class Son(Father):
    pass


if __name__ == '__main__':
    A=Father()
    A.costmoney()

私有方法

class Father(object):
    def __init__(self):
        self._name='王三'
        self.__money='800元'



    def __costmoney(self):
        #定义私有属性
        print(self.__money)


    def costmoney(self):
         #调用私有方法
        self.__costmoney()


class Son(Father):
    pass


if __name__ == '__main__':
    A=Father()
    A.costmoney()

重写父类的方法

class ChickenSoup(object):
    '''祖传的,秘方,爷爷留下来的'''
    def __init__(self):
        self.name = '爷爷祖传的秘方'
    def cookstyle(self):
        print("***********这是爷爷的秘方**********")
        print('加两斤的鸡,20g的盐,3斤水,熬成一锅')

class Chicken2Soup(ChickenSoup):
    '''孙子学到的'''
    def cookstyle(self):
        # print('加一斤的鸽子,20g的盐,3斤水,熬成一锅,再加上50g糖')
        #在爷爷的基础上重写自己的方法
        super(Chicken2Soup, self).cookstyle()
        #执行父类的方法
        #以下2种方法都可以使用
        # super().cookstyle()
        # ChickenSoup().cookstyle()
        print("这是我自己的秘方,hahaha ")


if __name__ == '__main__':
    chicken = Chicken2Soup()
    chicken.cookstyle()
    print(Chicken2Soup.__mro__)

类属性


class Peoson(object):
    # 类的属性
    name='老王'
    age=18

    def __init__(self):
        '''实例属性'''
        self.book = '我的隔壁'



if __name__ == '__main__':
   one=Peoson()
   print(one.book)#调用实例属性
   print(one.name)#通过实例调用类属性
   print(Peoson.name)#通过哦类调用类属性

修改类属性

class Peoson(object):
    #类的属性
    country='中国'
    def __init__(self):
        '''实例属性'''
        self.book='我的隔壁'
        self.name='小张'
        self.age = 18


if __name__ == '__main__':
    print("类属性:",Peoson.country)
    zhang = Peoson()
    zhang.country='新加坡'#增加了一个实例属性
    Peoson.country='南非'#真正修改类属性 类名.属性然后赋值
    print("实例调用的类属性",zhang.country)
    print("类属性:",Peoson.country)

### 私有属性私有方法是什么 在面向对象编程中,**私有属性****私有方法**是指那些只能在类的内部访问的属性方法,外部代码无法直接访问或修改它们。这种机制有助于保护对象的内部数据,防止外部代码误操作或滥用。 #### 示例解析 假设有一个`BankAccount`类,其中包含私有属性私有方法: ```python class BankAccount: def __init__(self, owner, balance=0): self.owner = owner # 公有属性 self.__balance = balance # 私有属性 def deposit(self, amount): if amount > 0: self.__balance += amount print(f"Deposited {amount}. New balance: {self.__balance}") def withdraw(self, amount): if 0 < amount <= self.__balance: self.__balance -= amount print(f"Withdrew {amount}. New balance: {self.__balance}") else: print("Insufficient funds") def __update_balance(self, amount): # 私有方法 self.__balance += amount print(f"Balance updated to {self.__balance}") ``` 在这个例子中: - `self.__balance` 是一个私有属性,外部代码无法直接访问或修改它。 - `__update_balance` 是一个私有方法,只能在类的内部调用,外部代码无法直接调用它。 #### 私有属性方法的特点 - **私有属性**:以双下划线开头(如`__balance`),表示这是一个私有属性。外部代码无法直接访问或修改它,只能通过类内部的方法间接操作。 - **私有方法**:同样以双下划线开头(如`__update_balance`),表示这是一个私有方法。外部代码无法直接调用它,只能在类的内部调用。 #### 访问限制 尽管Python并没有严格的访问控制(如Java的`private`关键字),但是约定俗成地使用双下划线前缀来表示私有成员,Python解释器会对其进行名称改写(name mangling),使得外部代码更难以直接访问。 例如: ```python account = BankAccount("Alice", 100) account.deposit(50) # 正常操作 # account.__balance # 这行代码会抛出 AttributeError # account.__update_balance(20) # 这行代码也会抛出 AttributeError ``` ### 知识点 1. **私有属性** - 以双下划线开头,外部无法直接访问,只能通过类内部方法操作。 2. **私有方法** - 以双下划线开头,外部无法直接调用,只能在类内部调用。 3. **封装** - 通过私有属性方法实现数据隐藏保护,增强代码的安全性可维护性。 每个知识点的详解不超过50个字: - **私有属性**:以双下划线开头,外部无法直接访问,增强数据保护。 - **私有方法**:以双下划线开头,外部无法直接调用,确保内部逻辑安全。 - **封装**:隐藏内部细节,仅暴露必要的接口,提高代码的安全性可维护性。 私有属性方法有助于保护对象的内部状态,防止外部代码的误操作,从而提高代码的健壮性安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值