Python—类私有化属性和方法

目录

一、私有化属性

语法

特性

特性-1

特性-2

特性-3

二、私有化方法

语法

示例

特性

三、Property属性

实现方式 

实现方式-1

示例

实现方式-2


一、私有化属性

语法:

        两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。


示例:

class Person(object): 
    __age = 18 # 定义一个私有化属性,属性名字前面加两个下划线 

特性

特性-1:

        私有化属性不能在类外面访问。

class Person(object): 
    __age = 18 # 定义一个私有化属性,属性名字前面加两个下划线
 
xiaoming = Person() 
print(Person.__age) # 类对象无法访问私有类属性 
print(xiaoming.__age) # 实例对象无法访问私有属性 

特性-2:

        私有化属性可以在类里面访问,修改。

class Person(object): 
    __age = 18 # 定义一个私有化属性,属性名字前面加两个下划线 

    def get_age(self): # 访问私有类属性 
        return Person.__age 

    def set_age(self, age): # 修改私有类属性 
        Person.__age = age 

xiaoming = Person() 
print(xiaoming.get_age()) 
xiaoming.set_age(20) 
print(xiaoming.get_age()) 

# 输出 
# 18 
# 20 


特性-3:

        子类不能继承私有化属性。 

class Person(object): 

    def __init__(self): 
        self.__age = 18 # 定义一个私有实例属性 
    def get_age(self): 
        return self.__age # 访问私有实例属性 
    def set_age(self,age): 
        self.__age = age # 修改私有实例属性 

class China(Person): 

    def get_age(self): 
        print(self.__age) # 尝试访问父类的私有实例属性 

xiaoming = China() 
xiaoming.get_age() # 报异常无法访问 


二、私有化方法

语法:

        私有化方法,即在方法名前面加两个下划线。 

示例:

class A(object): 
## 在方法前面加两个 __ 下划线,变成私有化方法 
    def __myname(self): 
        print('xiaoming’) 
    #普通方法 
    def myname(self): 
        print(xiaoming) 

a = A() a.myname() # 正常调用 
a.__myname() # 调用私有化方法,报错 

特性:

        私有化方法一般是类内部调用,子类不能继承,外部不能调用。 

三、Property属性

实现方式 

实现方式-1:

        类属性,即在类中定义值为property对象的类属性

示例:

        给age属性设置值时,会自动调用setage方法,获取age属性值时,会自动调用getage方法。

class Person(object): 
    def __init__(self): 
        self.__age = 18 # 定义一个私有化属性,属性名字前加连个 __ 下滑线 
    def get_age(self): # 访问私有实例属性 
        return self.__age 
    def set_age(self,age): # 修改私有实例属性 
        if age < 0: 
            print('年龄不能小于0') 
        else: 
            self.__age = age 

age = property(get_age,set_age) # 定义一个属性,当对这个age设置值时调用set_age, 
                                # 当获取值时调用get_age 
                                # 注意:必须是以get,set开头的方法名,才能被调用 
xiaoming = Person() 
xiaoming.age = 15 
print(xiaoming.age) 


实现方式-2:

        装饰器,即在方法上使用装饰器。

class Person(object): 
    def __init__(self): 
        self.__age = 18 # 定义一个私有化属性,属性名字前加连个 __ 下滑线 

    @property # 使用装饰器对age进行装饰,提供一个getter方法 
    def age(self): # 访问私有实例属性 
        return self.__age 

    @age.setter # 使用装饰器进行装饰,提供一个setter方法 
    def age(self,age): # 修改私有实例属性 
        if age < 0: 
            print('年龄不能小于0') 
        else: 
            self.__age = age 

xiaoming = Person() 
xiaoming.age = 15 
print(xiaoming.age) 

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值