博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 类与对象
阅读量:5250 次
发布时间:2019-06-14

本文共 3492 字,大约阅读时间需要 11 分钟。

_init_方法详解

#方式一:为对象初始化自己独有的特征class People:    country='China'    x=1    def run(self):        print('----->', self)# 实例化出三个空对象objone=People()objtwo=People()objthree=People()# 为对象定制自己独有的特征objone.name='tom'objone.age=18objone.sex='male'objtwo.name='jack'objtwo.age=22objtwo.sex='female'objthree.name='rusa'objthree.age=26objthree.sex='female'print(objone.__dict__)print(objtwo.__dict__)print(objthree.__dict__)print(People.__dict__)#方式二、为对象初始化自己独有的特征class People:    country='China'    x=1    def run(self):        print('----->', self)# 实例化出三个空对象objone=People()objtwo=People()objthree=People()# 为对象定制自己独有的特征def fuzhi(obj, x, y, z):     obj.name = x    obj.age = y    obj.sex = zfuzhi(objone,'tom',18,'male')fuzhi(objtwo,'jack',22,'female')fuzhi(objthree,'rusa',26,'female')#方式三、为对象初始化自己独有的特征class People:    country='China'    x=1    def fuzhi(obj, x, y, z):         obj.name = x        obj.age = y        obj.sex = z    def run(self):        print('----->', self)objone=People()People.fuzhi(objone,'tom',18,'male')objtwo=People()People.fuzhi(objtwo,'jack',22,'female')objthree=People()People.fuzhi(objthree,'rusa',26,'female')# 方式四、为对象初始化自己独有的特征class People:    country='China'    x=1    def __init__(obj, x, y, z):         obj.name = x        obj.age = y        obj.sex = z    def run(self):        print('----->', self)objone=People('egon',18,'male') #People.__init__(objone,'tom',18,'male')objtwo=People('lxx',38,'female') #People.__init__(objtwo,'jack',22,'female')objthree=People('alex',38,'female') #People.__init__(objthree,'rusa',26,'femal

ps:__init__方法内可以有任意的python代码,但是一定不能有返回值。

类的特殊属性

  • 类名.__name__# 类的名字(字符串)
  • 类名.__doc__# 类的文档字符串
  • 类名.__base__# 类的第一个父类(在讲继承时会讲)
  • 类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
  • 类名.__dict__# 类的字典属性
  • 类名.__module__# 类定义所在的模块
  • 类名.__class__# 实例对应的类(仅新式类中)

属性查找

类有两种属性:数据属性和函数属性

  • 类的数据属性是所有对象共享的
  • 类的函数属性是绑定给对象用的
#类的数据属性是所有对象共享的,id一样print(id(Colleges.school))print(id(s1.school))print(id(s2.school))print(id(s3.school))'''4377347328437734732843773473284377347328'''#类的函数属性是绑定给对象使用的,obj.method称为绑定方法,内存地址都不一样print(Colleges.learn)print(s1.learn)print(s2.learn)print(s3.learn)'''
>
>
>

obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到则抛出异常

绑定到对象的方法特殊之处

  • 类中定义的函数(没有被任何装饰器装饰的)是类的函数属性,类可以使用,但必须遵循函数的参数规则,有几个参数需要传几个参数
  • 类中定义的函数(没有被任何装饰器装饰的)是给对象使用的,而且是绑定到对象的,虽然所有对象指向的都是相同的功能,但是绑定到不同的对象就是不同的绑定方法
  • 绑定到对象的方法的特殊之处在于,绑定给谁就由谁来调用,谁来调用,就会将‘谁’本身当做第一个参数传给方法,即自动传值(方法__init__也是一样的道理)

ps:绑定到对象的方法的这种自动传值的特征,决定了在类中定义的函数都要默认写一个参数self,self可以是任意名字,但是约定俗成地写出self

对象交互

class Garen:        #定义英雄盖伦的类,不同的玩家可以用它实例出自己英雄;    camp='Demacia'  #所有玩家的英雄(盖伦)的阵营都是Demacia;    def __init__(self,nickname,aggressivity=58,life_value=455): #英雄的初始攻击力58...;        self.nickname=nickname  #为自己的盖伦起个别名;        self.aggressivity=aggressivity #英雄都有自己的攻击力;        self.life_value=life_value #英雄都有自己的生命值;    def attack(self,enemy):   #普通攻击技能,enemy是敌人;        enemy.life_value-=self.aggressivity #根据自己的攻击力,攻击敌人就减掉敌人的生命值                        class Riven:    camp='Noxus'  #所有玩家的英雄(锐雯)的阵营都是Noxus;    def __init__(self,nickname,aggressivity=54,life_value=414): #英雄的初始攻击力54;        self.nickname=nickname  #为自己的锐雯起个别名;        self.aggressivity=aggressivity #英雄都有自己的攻击力;        self.life_value=life_value #英雄都有自己的生命值;    def attack(self,enemy):   #普通攻击技能,enemy是敌人;        enemy.life_value-=self.aggressivity #根据自己的攻击力,攻击敌人就减掉敌人的生命值        实例化对象        g=Garen('草丛伦')r=Riven('锐雯雯')对象交互r.attack(g)

 

转载于:https://www.cnblogs.com/dragon-123/p/10268948.html

你可能感兴趣的文章
IOC容器
查看>>
织梦仿站第三课:网站的文件分割
查看>>
Windows 2003全面优化
查看>>
URAL 1002 Phone Numbers(KMP+最短路orDP)
查看>>
web_day4_css_宽度
查看>>
用sql删除数据库重复的数据的方法
查看>>
输出n阶“魔方阵”
查看>>
学习笔记21—PS换图片背景
查看>>
electron入门心得
查看>>
格而知之2:UIView的autoresizingMask属性探究
查看>>
Spring3.0 AOP 具体解释
查看>>
我的Hook学习笔记
查看>>
EasyUI DataGrid 中字段 formatter 格式化不起作用
查看>>
海量数据存储
查看>>
js中的try/catch
查看>>
[导入]玫瑰丝巾!
查看>>
自动从网站上面下载文件 .NET把网站图片保存到本地
查看>>
【识记】 域名备案
查看>>
STL uva 11991
查看>>
MY SQL的下载和安装
查看>>