暂无分类
暂无标签
发布于2019-10-29 16:42 阅读(1113) 评论(0) 点赞(18) 收藏(1)
0
1
2
3
4
特殊方法都是以双下划线开头双下划线结尾的方法
特殊方法不需要自己调用
学习特殊方法:
对于Person这个类name属性是必须,并且每一个实例对象的name属性是不一样的
我们现在是将name属性手动添加
特别容易出错
特殊方法不需要我们自己调用
特殊方法会在特殊的时候自动调用
init会在对象创建以后立即执行
init会像新创建的对象初始化属性
class Person:
def __init__(self, age, name, gender):
self.name = name
self.age = age
self.gender = gender
def run(self):
if self.age > 3:
print(f'{self.name}已经是{self.age}岁的{self.gender}孩子了,会跑了。')
def speak(self):
if self.age < 4:
print(f'{self.name}是{self.age}的{self.gender}孩子,还不会说话。')
person1 = Person(name='葫芦娃', age=5, gender='女')
person1.run()
# 葫芦娃已经是5岁的女孩子了,会跑了。
person2 = Person(2, gender='男', name='钢铁侠')
person2.speak()
# 钢铁侠是2的男孩子,还不会说话。
类的基本结构:
# class 类名([父类]):
# 公共属性...
# 对象的初始化方法
# def __init__(self,....)
# ....
# 其他的方法
# def method(self,...)
# ....
尝试定义一个表示车的类
class Car:
def __init__(self, name, color):
self.name = name
self.color = color
def run(self):
print(f'{self.color }{self.name}正在跑')
def didi(self):
print(f'{self.color }{self.name}正在鸣笛')
c1 = Car('奔驰', '黑色')
c1.run()
# 黑色奔驰正在跑
我们要增加数据的安全性:
封装是面向对象的三大特性之一
封装指的是隐藏对象中一些不希望被外部访问到的属性或方法
如何隐藏对象中的一个属性
将对象的属性名,修改为一个外部不知道的名字
如何获取(修改)对象当中的属性
我们可以提供一个getter和setter方法可以访问和修改属性
使用封装,确实增长了类定义复杂度,但是它确保了数据的安全性:
class Dog:
def __init__(self, name, age):
self.hidden_name = name
self.hidden_age = age
def run(self):
print(f'{self.hidden_age}岁的{self.hidden_name}正在跑')
def speak(self):
print(f'{self.hidden_age}岁的{self.hidden_name}正在叫')
def get_age(self):
return self.hidden_age
def set_age(self, age):
if age > 0:
self.hidden_age = age
def get_name(self):
return self.hidden_name
d1 = Dog('二哈', 5)
d1.run()
# 5岁的二哈正在跑
print(d1.get_name())
# 二哈
d1.set_age(4)
d1.run()
# 4岁的二哈正在跑
可以为对象的属性使用双下划线开头–>__xxx
双下划线开头的属性是对象的隐藏属性,隐藏属性只能在类的内部访问,无法通过外部访问
隐藏属性是python自动为属性改了一个名字
实际改的名字是:_类名__属性名[^__name --> _Person__name]
class Person:
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__name
def set_name(self, new_name):
self.__name = new_name
p = Person('钢铁侠')
p.__name = '葫芦娃'
print(p.get_name())
# 钢铁侠
p._Person__name = '葫芦娃'
print(p.get_name())
# 葫芦娃
p.set_name = '蜡笔小新'
print(p.get_name())
# 葫芦娃
一般情况,使用_开头的属性都是私有属性,没有特殊情况下不要修改私有属性
添加property装饰器以后,我们就可以像调用属性一个调用方法
class Person:
def __init__(self, name):
self._name = name
@property
def name(self):
print('get方法执行了')
return self._name
p = Person('蜡笔小新')
print(p.name)
# get方法执行了
# 蜡笔小新
这节课主要学的是面向对象的封装,这样可以隐藏数据,让数据更加安全。通过这堂课的学习,我也加深了一遍对类的印象,更加熟练的定义类并且使用类了。继续加油,还要更加认真地学习!
0
1
2
3
4
5
作者:9384vfnv
链接: https://www.pythonheidong.com/blog/article/147618/035a3046d90e64d93686/
来源: python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系z452as@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!