私有属性和私有方法

私有属性

1、私有属性只能在类的内部使用,在类的外部无法调用,方法为在属性名前加上两条下划线。私有属性一定要在init方法中定义

class Person(object):
    def __init__(self,name,age):
        self.name = name    #name为公有属性
        self.__age = age    #将age设置为私有属性

    def show(self):
        print(self.__age)      

p = Person('zs',20)
p.show()      #类内部的函数可以调用私有属性
# print(p.name,p.__age)     #类的外部在调用私有属性时会报错

2、下面我们举一个私有属性应用的例子:在传给对象的年龄小于0或大于200时,提示有错

class Person(object):
    def __init__(self,name):
        self.name = name
        self.__age = 0

    def show(self):
        print(self.__age)

    def set_age(self,new_age):
        if 0<= new_age <200:
            self.__age = new_age   #输入的年龄符合要求,则用该年龄给self.__age重新赋值
        else:
            print('invalid age')    #输入的年龄不符合要求,则返回错误提示

p = Person('zs')
p.set_age(-1)
p.show()     #若输入的年龄符合规则,则输出该年龄,否则输出初始化定义的年龄

私有方法

1、私有方法只能在类的内部使用,无法在类的外部调用。写法是在方法名前加两个下划线

class Person(object):
    def __show1(self,name,age):   #定义私有方法show1
        print(name,age)

    def show2(self):
        p.__show1('ls',20)

p = Person()
p.show2()    #show2可以在内部调用__show1,输出show2内调用时传的参数
p.__show1('zs',18)     #外部无法调用__show1,运行时报错

2、子类不能直接调用父类的私有属性和私有方法,下方定义的子类对象在调用引用了父类私有属性、私有方法的方法时,则会报错

class Person(object):
    def __init__(self):
        self.__age = 10

    def __show(self):
        print('__show')


class Student(Person):
    def func(self):
        print(self.__age)
        self.__show()

s = Student()
s.func()

在类的外部获取私有方法、私有属性

1、Python中没有绝对的私有,我们可以通过__dict__魔法方法获取类中的属性和方法,包括私有属性和私有方法

2、获取私有属性的例子:

class Person(object):
    def __init__(self,name,age):
        self.name = name 
        self.__age = age

p = Person('zs',20)
print(p.__dict__)         #获取对象的属性

这里的输出是

{'name': 'zs', '_Person__age': 20}

我们可以看到,与公有方法不同,私有方法age写作_Person__age,我们可以通过它来调用。下方的代码在执行时,则能够同时打印出公有方法和私有方法

class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.__age = age

p = Person('zs',20)
print(p.name,p._Person__age)

3、获取私有方法的例子:

class Person(object):
    def __show1(self,name,age): 
        print(name,age)

print(Person.__dict__)

利用dict方法,可以打印出Person类中所有的方法,其中show1对应的方法显示为_Person__show1,我们可以通过这个在外部调用show1

class Person(object):
    def __show1(self,name,age): 
        print(name,age)

p = Person()
p._Person__show1('zs',18)

4、但是这种调用私有属性、私有方法的方式并不提倡使用,因为属于违规操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值