对象成员的封装
公共成员
- 对象成员属性:__init__方法中进行定义:所有对象各有一份
- 对象成员方法:对对象成员属性的访问及操作
私有成员
- 私有属性:—般情况下不被外界访问,只供内部使用,防止外部修改。在定义属性的时候,使用两个下划线开头;本质类—旦见到这种内容,会修改他的名称(_类名__属性)
- 私有方法:不对外开放的方法,只供类中其他的方法进行调用
类成员的封装
类的属性
- 定义的位置为类开始的位置
- 所有的对象公用一份数据
- 在创建对象以前就定义完成了
- 用来记录所有对象共同属性的内容
类的方法
- 定义类方法的时候需要加@classmethod
- 定义类方法参数的第一个是cls
- 类方法只能访问类属性,不能访问对象属性
属性和方法的使用
1. 类名.属性(方法)
2. 对象名.属性(方法)
静态方法
定义
@staticmethod def 静态方法名称(参数列表)
说明
不能使用类成员也不能使用对象成员
@property
概念
创建一个私有对象属性,访问的时候按照公共属性进行访问,访问方便,而且内部可以添加—个函数对修改或者访问进行限制
@property
查看属性内容自动调用该方法
@property def 属性名称(self)
# 函数内容使用:
self.__属性名称
@setter
用来修改属性内容的(如果不需要可以省略)
@属性.setter def 属性名称(self,参数列表)
# 函数内容使用
self.__属性名称
- 类外不能修改该属性
- 类内修改属性的时候需要使用self.__属性
示例
# 定义一个类A,存在三个变量
# a:外部随意看﹐随意改
# b:外部随意看﹐改必须满足值为>3的整数
# c:外部不能看﹐也不能该﹖必须使用方法进行看和改
class A(object):
def __init__(self, a, b, c):
self.a = a
self.__b = b
self.__c = c
@property
def b(self):
return self.__b
@b.setter
def b(self, new_b):
if new_b > 3:
self.__b = new_b
def get_c(self):
return self.__c
def set_c(self, new_c):
self.__c = new_c
a1 = A(1, 2, 3)
print(a1.a)
a1.a = 4
print(a1.a)
print(a1.b)
a1.b = 5
print(a1.b)
print(a1.get_c())
a1.set_c(6)
print(a1.get_c())
运行结果:
1
4
2
5
3
6