概述
文章目录
- 私有属性
- 私有方法
- 在类的外部获取私有方法、私有属性
私有属性
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、但是这种调用私有属性、私有方法的方式并不提倡使用,因为属于违规操作
最后
以上就是雪白奇迹为你收集整理的私有属性和私有方法私有属性私有方法在类的外部获取私有方法、私有属性的全部内容,希望文章能够帮你解决私有属性和私有方法私有属性私有方法在类的外部获取私有方法、私有属性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复