day24 Pythonpython 面向对象设计 类
将一些相同特征和动作的成为类,现有类才能创建对象,对象就是特征和动作的结合体
类:把一类事物的相同特征和动作整合到一起就是类。类是一个抽象概念
对象:就是基于类而创建的一个具的事物(具体存在的),也是特征和动作给的结合
类是用来描述 一类事物,类的对象指的是这一类书屋中的一个个个体,是事物就要有属性属性分为
1:数据属性:就是变量
2:函数属性:就是函数,在面向对象里通常称为方法
注意:::类和对象均用点来访问自己的属性
class Chinese: '这是一个中国人' dang='共青团' def sui_di_tu_tan(): print('正在吐')
#调用这个函数一定要加参数,只不过还没定义参数的意义 def cha_dui(self): print('插到了前面') #数据属性 print(Chinese.dang) #函数属性 Chinese.sui_di_tu_tan() print(dir(Chinese)) #查看类的属性字典 print('=========================================') print(Chinese.__dict__) print('=============================================') print(Chinese.__dict__['dang']) print('=========================================') print(Chinese.cha_dui(1)) print('==============================') Chinese.__dict__['sui_di_tu_tan']() Chinese.__dict__['cha_dui']("you") 结果: 共青团 正在吐 ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'cha_dui', 'dang', 'sui_di_tu_tan'] ========================================= {'__module__': '__main__', '__doc__': '这是一个中国人', 'dang': '共青团', 'sui_di_tu_tan': <function Chinese.sui_di_tu_tan at 0x7f7d87a91158>, 'cha_dui': <function Chinese.cha_dui at 0x7f7d87a911e0>, '__dict__': <attribute '__dict__' of 'Chinese' objects>, '__weakref__': <attribute '__weakref__' of 'Chinese' objects>} ============================================= 共青团 ========================================= 插到了前面 None ============================== 正在吐 插到了前面
对象由类实例化而来,类实例化的结果称为一个实例或者称为一个对象
class Chinese: '这是一个中国人' dang='共青团' def sui_di_tu_tan(): print('正在吐') def cha_dui(self): print('%s插到了前面' %self.名字) #初始化:__init__定制对象的属性,__init__会自动return所以要是自己加上return回报错 def __init__(self,name,age,gender): print('初始化开始') print('-------------') print(self)#========>p1 print('-------------') self.名字=name #p1.名字=name self.年龄=age #p1.年龄=age self.性别=gender #p1.性别=gender print('初始化结束') #class自动帮你return了 def eat_foot(self,food): print('%s is eating %s' % (self.名字,food)) #实例化会出发__init__函数运行 p1 = Chinese('charon',12,'F') print(p1.__dict__) print(p1.名字) #p1产生的字典由__init__产生,p1调用dang在__init__作用域没找到,就去外一层Chinese作用域找dang print(p1.dang) #print(Chinese.__dict__) Chinese.sui_di_tu_tan() Chinese.cha_dui(p1) #p1.sui_di_tu_tan() p1.cha_dui() #与self内春地址相同 print(p1) p1.eat_foot('shit') print('=========================================') p2 = Chinese('pluto',100,'F') p2.eat_foot('apple') 结果: China Japan {'name': 'charon'} Japan eventment eventment {'__module__': '__main__', 'country': 'Japan', '__init__': <function Chinese.__init__ at 0x7fc8ed2ff158>, 'paly_ball': <function Chinese.paly_ball at 0x7fc8ed2ff1e0>, '__dict__': <attribute '__dict__' of 'Chinese' objects>, '__weakref__': <attribute '__weakref__' of 'Chinese' objects>, '__doc__': None, 'dang': 'eventment'} =================================================== {'__module__': '__main__', 'country': 'Japan', '__init__': <function Chinese.__init__ at 0x7fc8ed2ff158>, 'paly_ball': <function Chinese.paly_ball at 0x7fc8ed2ff1e0>, '__dict__': <attribute '__dict__' of 'Chinese' objects>, '__weakref__': <attribute '__weakref__' of 'Chinese' objects>, '__doc__': None}
类的增删改查
# -*- coding:utf8 -*- class Chinese: country = 'China' def __init__(self,name): self.name=name def paly_ball(self,ball): print('%s in playing %s' % (self.name,ball)) #查看 print(Chinese.country) #修改 Chinese.country = 'Japan' print(Chinese.country) #用这个类生成一个实例 p1 = Chinese('charon') print(p1.__dict__) print(p1.country) #增加 Chinese.dang='eventment' print(Chinese.dang) print(p1.dang) #删除 #del Chinese.dang print(Chinese.__dict__) print('===================================================') del Chinese.dang print(Chinese.__dict__) 结果: China Japan {'name': 'charon'} Japan eventment eventment {'__module__': '__main__', 'country': 'Japan', '__init__': <function Chinese.__init__ at 0x7f29a1607158>, 'paly_ball': <function Chinese.paly_ball at 0x7f29a16071e0>, '__dict__': <attribute '__dict__' of 'Chinese' objects>, '__weakref__': <attribute '__weakref__' of 'Chinese' objects>, '__doc__': None, 'dang': 'eventment'} =================================================== {'__module__': '__main__', 'country': 'Japan', '__init__': <function Chinese.__init__ at 0x7f29a1607158>, 'paly_ball': <function Chinese.paly_ball at 0x7f29a16071e0>, '__dict__': <attribute '__dict__' of 'Chinese' objects>, '__weakref__': <attribute '__weakref__' of 'Chinese' objects>, '__doc__': None}
实例属性增删改查
class Chinese: country='China' def __init__(self,name): self.name=name def paly_ball(self,ball): print('%s 正在打 %s' % (self.name,ball)) #生成一个实例 p1 = Chinese('charon') #查看实例属性字典 print(p1.__dict__) #查看实例属性 print(p1.name) print(p1.paly_ball) p1.paly_ball('football') #增加实例属性 p1.age = 18 print(p1.__dict__) print(p1.age) #属性分为有函数属性跟数据属性 #实例只有数据属性,他的函数属性是调类的 #修改实例属性 p1.age=200 print(p1.__dict__) print(p1.age) #删除 del p1.age print(p1.__dict__) 结果: {'name': 'charon'} charon <bound method Chinese.paly_ball of <__main__.Chinese object at 0x7fafb2db8550>> charon 正在打 football {'name': 'charon', 'age': 18} 18 {'name': 'charon', 'age': 200} 200 {'name': 'charon'}
对象和实例属性
# class Chinese: # country='China' # def __init__(self,name): # self.name=name # def paly_ball(self,ball): # print('%s 正在打 %s' % (self.name,ball)) # p1=Chinese('charon') # print(p1.country) # p1.country='Japan' # #print(p1.__dict__) # #print(Chinese.__dict__) # print(p1.country) # print(Chinese.country) # print('类的--->',Chinese.country) # print('实例的--->',p1.country) # class Chinese: # country = '中国' # def __init__(self,name): # self.name=name # # def play_ball(self,ball): # print('%s 正在打 %s' %(self.name,ball)) # p1=Chinese('alex') # print(p1.country) country='中国-------------------' class Chinese: country='中国' def __init__(self,name): self.name=name #这个country是个变量,类是点加country print('--->',country) def play_ball(self,ball): print('%s 正在打 %s' %(self.name,ball)) #print(Chinese.__dict__) #print(Chinese.country) p1=Chinese('alex') print(Chinese.country) print(Chinese.__dict__) 结果: ---> 中国------------------- 中国 {'__module__': '__main__', 'country': '中国', '__init__': <function Chinese.__init__ at 0x7f298ab72158>, 'play_ball': <function Chinese.play_ball at 0x7f298ab721e0>, '__dict__': <attribute '__dict__' of 'Chinese' objects>, '__weakref__': <attribute '__weakref__' of 'Chinese' objects>, '__doc__': None}
换个姿势搞你,就不信你不爽
class Chinese: country='China' l=['a','b'] def __init__(self,name): self.name=name print(self.name) def play_ball(self,ball): print('%s 正在打 %s' %(self.name,ball)) p1=Chinese('charon') # p1.l=['a','b','c'] # print(p1.l) # print(Chinese.l) # print(Chinese.__dict__) print(p1.l) p1.l.append('c') print(p1.l) print(p1.__dict__) print(Chinese.l) 结果: charon ['a', 'b'] ['a', 'b', 'c'] {'name': 'charon'} ['a', 'b', 'c']