Python面向对象中

1. 类中的特殊方法

  • 在类中定义的一些特殊方法也称为魔法方法
  • 特殊方法格式 __xxx__( )
  • 特殊的方法在特定的时候会自动调用。比如 __init__( ) 在初始化的时候就被调用
  • 类定义中的self指的是类的实例(instance)
  • 在类的实例化的时候, 创建出来的实例是个空壳,所以需要定义__init( )__来给实例传递一些数据
  • __init( )__ 中定义的属性, self.attr, 是实例的属性。 如果像这样调用属性, Class.__init( )__,这里的参数是类中的属性

2. 类的封装

  • 面向对象三大特性: 封装,继承,多态
  • 为什么需要封装: 增强数据安全性
    1. 隐藏属性,不让客户随意访问到
    2. 不让客户轻易修改属性
  • Python中的封装是相对的,不是决定的。 一般以下滑线开头的属性, 都是封装的特殊属性, 提醒用户不要随意访问修改。
  • 其他编程语言如C++ 实现封装,把属性分为共有属性和私有属性, 只有共有属性才能被外界访问
  • 我们可以定义getter( )、setter( ) 来外部访问修改封装属性
  • 类中的属性如以单下划线 “_” 开头, 如 _name, 外界上能访问, obj._name
  • 类中的属性如如以双下划线 “__” 开头,如 __name,外接不能访问, obj.__name。 如果外界直接访问, 形式为 obj._Class__name; 在类内部,self.__name可以被访问
  • _name 或 __name 可以理解为私有属性, 不建议外部直接访问。如果要访问, 那么就要通过方法或者property装饰器访问

3. property装饰器

class Person:
    def __init__(self, name):
        self._name = name

    def speak_name(self):
        print('大家好,我是%s' % self.name)

    @property
    def name(self):
        print("Successful to get the name")
        return self._name

    @name.setter
    def name(self, name):
        self._name = name
        print('Successfully change the name as %s' % self._name)

    @name.deleter
    def name(self):
        del self._name
        print("Successfully deleted name attribute")


p1 = Person("LeBron James")
print(p1.name)
p1.name = "Bronny"
del p1.name
  • 属性可以是变量,也可以是方法

  • Person 内部真正的变量是_name,name其实是一个方法,用上@property 之后, name就好像是p1的一个变量

  • name这时候也是p1的一个属性。p1中所有的属性:
    在这里插入图片描述

  • del p1.name,是把_name 这个属性给删除了, name还在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值