1.私有方法和私有属性
私有方法只能在类内部被调用,不能被对象使用
私有属性只能在类内部使用,不能被对象使用
私有属性只能在类内部使用,对象不能使用,但是,我们可以通过在类内部定义公有方法对私有属性进行调用或修改,然后对象在调用这个公有方法使用。
###私有属性和私有方法########
#在属性名和方法名前面加上 __
class Person(object):
def __init__(self):
# 公有属性
self.name = "李四"
#私有属性
self.__age = 18
#定义公有方法
def show_info(self):
# 私有属性只能在类内部使用,可以通过内部公有方法修改,
self.__age = 29
print(self.name, self.__age)
#调用私有方法
#在类内部使用私有方法,可以通过内部公有方法调用
result = self.__show_address()
print( result)
#定义私有方法
def __show_address(self):
return "我的家在东北"
#定义对象,调用类
person = Person()
person.show_info()
#测试对象调用私有属性,结果报错,对象不能使用私有属性,私有属性只能在内部使用
#print(person.name, person.age)
#测试对象调用私有方法,结果报错,私有方法只能在类内部使用
#person.show_address()
输出:
李四 29
我的家在东北
===================================================================
扩展:私有属性和私有方法,只是把名称进行了伪装,改成了其他名称,导致我们访问失败,
如果我们拿到了伪装后的名字,对象还是可以类外面调用私有方法和私有属性
Notice::python中的私有没有做到绝对私有(非常规方法)
#查看对象属性
dict (可以使用对象或者类,查看对象或者类属性)
通过print(person.dict)拿到对象person的属性名称
#查看对象属性和方法
dir (可以查看对象或者类属性和方法)
通过print(dir(person))查看到对象person的属性和方法名称
看到伪装后的方法和属性名称,对象就可以调用
2.子类继承父类,默认无法使用父类的私有方法和属性
====================
扩展:
但是,如果我们拿到父类私有属性和私有方法的名称,子类也可以调用
3.私有属性的修改
私有属性只能在类内部进行修改
通过定义公有方法修改,让后对象调用公有方法
=====================
扩展:
如果我们知道私有属性伪装后的名字,我们也可以通过伪装后的名字去修改私有属性,
我们在外面通过对象调用私有属性名称去修改的,不是真的修改,而是对对象添加了一个__开头的属性,并没有做到修改私有属性
总结:私有方法和私有属性只能在类内部使用,私有属性的修改也只能在类内部修改(非常规操作除外)