面向对象
一.对象
对象,指的是内存中一块专门用来存储数据的区域。
对象包含三个部分:
- id:标识
- type:类型
- value:值
二.面向对象
Python属于面向对象的编程语言。
三.类的创建
类的基本结构:
class 类名([父类]):
公共的属性...
# 对象的初始化方法
def __init__(self,...):
...
# 其他的方法
def method_1(self,...):
...
def method_1(self,...):
...
...
示例:
# 定义一个人类
class Person():
# 构造方法
def __init__(self, name, age):
self.name = name
self.age = age
# 创建一个人类对象
student_01 = Person('朱茵', 18)
print(student_01.age)
四.封装
封装是面向对象的三大特征之一 ,为了限制随意修改对象的属性值。 可以采用以下几种方法:1.隐藏真实的属性名 2.使用getter以及setter方法。
狗类:
class Dog():
def __init__(self, name, age):
# hidden_name才是真实的属性值
self.hidden_name = name
self.hidden_age = age
# getter方法
def get_name(self):
return self.hidden_name
# setter方法
def set_name(self, name):
self.hidden_name = name
def get_age(self):
return self.hidden_age
def set_age(self, age):
# 可以对传入的值进行判断
if age < 0 or age > 100:
print('数据不合法...')
return
self.hidden_age = age
# 创建一个对象
dog01 = Dog('小黑' , 4)
print(dog01.get_name()) # 小黑
dog01.set_name('旺财')
print(dog01.get_name()) # 旺财
# 修改小黑的年龄
dog01.set_age(-10) # 数据不合法...
print(dog01.get_age()) # 4
完善:目前hidden_XXX属性其实还是能够在外部访问,可以在属性前面加上'__',这样该属性就只能在内部访问了
class Person():
def __init__(self, name):
# __name只能在内部访问
self.__name = name
# getter方法
def get_name(self):
return self.__name
# setter方法
def set_name(self, name):
self.__name = name
# 尝试访问__name
person01 = Person('迪丽热巴')
print(person01.__name) # Traceback (most recent call last)
# 尝试修改
person01.__name = '李沁'
print(person01.get_name()) # 迪丽热巴
隐藏属性'__XXX',其实是Python内部自动改了个名,修改为了:_类名__属性名。因此,实际运用中一般不用双下划线,使用单下划线就可以了,这只是起到告诉别人这是个私有属性,不要轻易修改的意图。
五.装饰器
class Person():
def __init__(self, name):
self._name = name
# property装饰器,用来将一个get方法,转换为对象的属性
# 添加property装饰器后,方法名与属性名必须一致
@property
def name(self):
print('get方法执行了...')
return self._name
# setter方法的装饰器: @属性名.setter
@name.setter
def name(self, name):
print('set方法调用了...')
self._name = name
# 调用
p = Person('迪丽热巴')
p.name = '章子怡' # set方法调用了...
print(p.name) # get方法执行了... 章子怡

浙公网安备 33010602011771号