面向对象编程 - 实例的增删改查(数据属性和函数属性)

class Chinese:
    country='China'
    def __init__(self,name):
        self.name=name

    def play_ball(self,ball):
        print('%s 正在打%s' %(self.name,ball))
##实例的数据属性的增删改查
p1=Chinese('alex')
print(p1.__dict__)              #{'name': 'alex'}

#查看
print(p1.name)                  #alex
print(p1.play_ball('篮球'))     #alex 正在打篮球    None

#增加
p1.age=20
print(p1.__dict__)          #{'name': 'alex', 'age': 20}
print(p1.age)               #20

#不要修改底层的属性字典
# p1.__dict__['sex']='male'
# print(p1.__dict__)
# print(p1.sex)

#修改
p1.age=12
print(p1.__dict__)          #{'name': 'alex', 'age': 12}
print(p1.age)               #12

#删除
del p1.age
print(p1.__dict__)          #{'name': 'alex'}


##实例的函数属性的增删改查

p1 = Chinese('alex')


# print(p1.__dict__) # {'name': 'alex'}
#
# # 查看
# print(p1.name) # alex
# print(p1.play_ball('篮球')) # alex 正在打篮球 None
#
# # 增加
# p1.age = 20
# print(p1.__dict__) # {'name': 'alex', 'age': 20}
# print(p1.age) # 20
# # =======================================================
# # 不要修改底层的属性字典
# # p1.__dict__['sex']='male'
# # print(p1.__dict__)
# # print(p1.sex)
# # ======================================================
# # 修改
# p1.age = 12
# print(p1.__dict__) # {'name': 'alex', 'age': 12}
# print(p1.age) # 12
#
# # 删除
# del p1.age
# print(p1.__dict__) # {'name': 'alex'}


# 实例的函数属性的增删改查
# 查
p1.play_ball('篮球') # alex 正在打篮球


# 增加
def study(self, lesson):
print('%s正在上%s' % (self.name, lesson))
#
#
p1.study = study
# p1.study('英语课')
# # 报错, 原因用实例创建的函数属性和类创建的函数属性不同, 类可以不输入self程序自动输入,而实例创建的必须手动输入
p1.study(p1, '英语课') # alex正在上英语课

# 修改
#  实际上修改就是增加
def play_ball(self, ball):
print('%s不喜欢%s' % (self.name, ball))
#
#
p1.play_ball = play_ball
p1.play_ball(p1, '篮球') # alex不喜欢篮球
Chinese.play_ball(p1, '篮球') # alex 正在打篮球
# 实例已经不能调用类属性的函数属性了,因为实例里面有自己的函数属性 ,类的函数属性修改还是需要在类下面操作

# 删除

del play_ball
p1.play_ball('篮球')# 报错 实例下面没有就报错, 不能铲除类的函数属性
def play_ball(self, ball):
print('%s不喜欢%s' % (self.name, ball))


p1.play_ball = play_ball

print(p1.__dict__)
p1.play_ball(p1, '篮球') # alex不喜欢篮球
del p1.play_ball # 只写play_ball 无效, 不能区分类下的,还是实例下的play_ball
print(p1.__dict__)


 

 

posted on 2020-04-24 17:27  jvincent  阅读(264)  评论(0编辑  收藏  举报