python的面向对象-实例(对象)的相关知识、实例化
1、对象就是实例,什么是实例
类运行的过程就是实例化的过程,实例化产生的结果就是产生了一个实例
class的牛逼之处就是不用手动的return,他会加载完函数之后,自动return __init__这个函数里面的字典,字典当中封装了数据属性
函数属性就是属于类的
2、实例化
只要用类名加()的方式运行,(在类中这个运行叫实例化)首先会运行__init__这个函数
class Chinese:#定义了Chinese这个类 dang="当"#定义了一个数据属性dang def __init__(self,name,age,gender): print("我是初始化函数,我开始运行了") self.mingzi=name self.nainji=age self.xignbie=gender#这样写完之后会自动return print("我结束啦") def suiditutan():#定义了一个函数属性 print("朝着墙上就是一口黄痰") def chadui(self):#又定义了一个函数属性 print("%s 插到了前面" %self) p1=Chinese("北爷",33,"female") C:\python35\python3.exe D:/pyproject/day24/对象相关知识.py 我是初始化函数,我开始运行了 我结束啦
实例化的过程就是运行__init__这个函数,从而生成一个字典,这个字典就是实例(对象)
字典当中封装的是数据属性
查看下p1这个实例的内容
class Chinese:#定义了Chinese这个类 dang="当"#定义了一个数据属性dang def __init__(self,name,age,gender): print("我是初始化函数,我开始运行了") self.mingzi=name self.nainji=age self.xignbie=gender#这样写完之后会自动return print("我结束啦") def suiditutan():#定义了一个函数属性 print("朝着墙上就是一口黄痰") def chadui(self):#又定义了一个函数属性 print("%s 插到了前面" %self) p1=Chinese("北爷",33,"female") print(p1.__dict__) C:\python35\python3.exe D:/pyproject/day24/对象相关知识.py 我是初始化函数,我开始运行了 我结束啦 {'nainji': 33, 'xignbie': 'female', 'mingzi': '北爷'}
注意:__init__里面不要有return 加了就会报错,class会自动帮你return
3、实例属性可以访问到类属性
class Chinese:#定义了Chinese这个类 dang="当"#定义了一个数据属性dang def __init__(self,name,age,gender):#self就是p1本身 print("我是初始化函数,我开始运行了") self.mingzi=name#p1.mingzi=name self.nianji=age#p1.nainji=age self.xingbie=gender#这样写完之后会自动return print("我结束啦") def suiditutan():#定义了一个函数属性 print("朝着墙上就是一口黄痰") def chadui(self):#又定义了一个函数属性 print("%s 插到了前面" %self) p1=Chinese("北爷",33,"female") print(p1.__dict__)#字典里面只有数据属性 print(p1.__dict__["nianji"])#用字典的方式取字典里面的value print(p1.__dict__["mingzi"]) print(p1.nianji)#实例调用nianji print(p1.mingzi)#这是实例的数据属性 # print(p1.mingzi222)#会报错,实例调用方法的时候会从__dict__里面找,找不到就报错了 print(p1.dang)#用实例去调用类的数据属性,虽然__dict__里面没有,但是上一级有 C:\python35\python3.exe D:/pyproject/day24/对象相关知识.py 我是初始化函数,我开始运行了 我结束啦 {'nianji': 33, 'xingbie': 'female', 'mingzi': '北爷'} 33 北爷 33 北爷 当
实例在调用属性的时候,先找实例的属性字典里面,如果没有的话,就去类的属性字典里面找,类里面在没有的话就报错了
4、类调用方法直接用类名加()
class Chinese:#定义了Chinese这个类 dang="当"#定义了一个数据属性dang def __init__(self,name,age,gender):#self就是p1本身 print("我是初始化函数,我开始运行了") self.mingzi=name#p1.mingzi=name self.nianji=age#p1.nainji=age self.xingbie=gender#这样写完之后会自动return print("我结束啦") def suiditutan():#定义了一个函数属性 print("朝着墙上就是一口黄痰") def chadui(self):#又定义了一个函数属性 print("%s 插到了前面" %self.mingzi) p1=Chinese("北爷",33,"female") Chinese.suiditutan() Chinese.chadui(p1) C:\python35\python3.exe D:/pyproject/day24/对象相关知识.py 我是初始化函数,我开始运行了 我结束啦 朝着墙上就是一口黄痰 北爷 插到了前面
5、用实例调用方法
class Chinese:#定义了Chinese这个类 dang="当"#定义了一个数据属性dang def __init__(self,name,age,gender):#self就是p1本身 print("我是初始化函数,我开始运行了") self.mingzi=name#p1.mingzi=name self.nianji=age#p1.nainji=age self.xingbie=gender#这样写完之后会自动return print("我结束啦") def suiditutan(self):#定义了一个函数属性 print("%s 朝着墙上就是一口黄痰" %self.mingzi) def chadui(self):#又定义了一个函数属性 print("%s 插到了前面" %self.mingzi) p1=Chinese("北爷",33,"female") Chinese.suiditutan(p1)#类调用方法 Chinese.chadui(p1)#类调用方法 p1.chadui()#实例调用方法,会自动把p1传给self p1.suiditutan()#实例调用方法,会自动把p1传给self C:\python35\python3.exe D:/pyproject/day24/对象相关知识.py 我是初始化函数,我开始运行了 我结束啦 北爷 朝着墙上就是一口黄痰 北爷 插到了前面 北爷 插到了前面 北爷 朝着墙上就是一口黄痰
6、再实例化一个p2 增加一个类的函数属性,用实例调用一下
class Chinese:#定义了Chinese这个类 dang="当"#定义了一个数据属性dang def __init__(self,name,age,gender):#self就是p1本身 self.mingzi=name#p1.mingzi=name self.nianji=age#p1.nainji=age self.xingbie=gender#这样写完之后会自动return def suiditutan(self):#定义了一个函数属性 print("%s 朝着墙上就是一口黄痰" %self.mingzi) def chadui(self):#又定义了一个函数属性 print("%s 插到了前面" %self.mingzi) def eatfood(self,food): print("%s 正在吃%s" %(self.mingzi,food)) p1=Chinese("北爷",33,"female") p1.eatfood("黄痰") p2=Chinese("喵爷",28,"female") p2.suiditutan()#实例调用类的函数属性,会自动把p1传给self p2.eatfood("黄焖鸡米饭")#实例调用类的函数属性,会自动把p1传给self C:\python35\python3.exe D:/pyproject/day24/对象相关知识.py 北爷 正在吃黄痰 喵爷 朝着墙上就是一口黄痰 喵爷 正在吃黄焖鸡米饭