目录
一、私有化属性
语法:
两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。
示例:
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)