目录
私有化之后,类内部可以使用,类外不可以使用,正常修改的方法:
1.继承:https://blog.youkuaiyun.com/g_optimistic/article/details/86490048
2.多态:https://blog.youkuaiyun.com/g_optimistic/article/details/86516078
1.介绍
不让别人看到自己的某些代码,起到保护作用,(不让别人动你的代码)
在开发过程中,保护核心代码,不让外部使用
2.封装的体现
正常代码:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
msg = '{}的年龄是{}'.format(self.name, self.age)
return msg
person = Person('zs', 10)
person.age = -10
print(person)
# zs的年龄是-10
(1)属性私有化:
给类的属性前面加两个下划线: __
class Person:
def __init__(self, name, age):
self.__name = name
self.__age = age
def __str__(self):
msg = '{}的年龄是{}'.format(self.__name, self.__age)
return msg
person = Person('zs', 20)
person.__name = '张三' # 在类的外面不能修改name的值
print(person) # zs的年龄是20
私有化之后,类内部可以使用,类外不可以使用,正常修改的方法:
- 使用 setter,getter,方法
class Person:
def __init__(self, name, age):
self.__name = name
self.__age = age
def set_age(self, age):
if age < 0 or age > 150:
print('输入的年龄不合法...')
return
self.__age = age
def get_age(self):
return self.__age
def __str__(self):
msg = '{}的年龄是{}'.format(self.__name, self.__age)
return msg
person = Person('zs', 20)
person.set_age(-10) # 输入的年龄不合法...
ret = person.get_age()
print(ret) # 20
print(person) # zs的年龄是20
- 对象名._类名__属性名=值
(2)方法私有化:
给类的方法前面加两个下划线: __
# 方法私有化之后,类外面的不能调用,但是类里面可以调用
class CallPhone:
def __tell(self):
print('正在通话中...')
def tell_one(self, money):
if money > 0:
self.__tell() # 在类内部,调用私有化后的方法
else:
print('欠费了啊...')
return
c1 = CallPhone()
c1.tell_one(-1) # 欠费了啊...
c1.tell_one(10) # 正在通话中...
3.私有化封装后的限制
位置 | 可不可以使用 |
类内部 | 可以 |
类外,对象外 | 不可以 |
子类,子类对象 | 不可以 |