Python基础笔记-10

65.组合

要求定义一个类,叫水池,水池里要有乌龟和鱼

class Turtle:

   def __init__(self,x):

       self.num=x

class Fish:

   def __init__(self,x):

       self.num=x

class Pool:

   def __init__(self,x,y):

       self.turtle=Turtle(x)

       self.fish=Fish(y)

   def print_num(self):

       print('水池中总共有%d乌龟,%d小鱼'%(self.turtle.num,self.fish.num))

运行代码如下:

====================== RESTART: D:/python/3.5.1/Pool.py ======================

>>> pool=Pool(1,10)

>>> pool.fish.num

10

>>> pool.turtle.num

1

>>>

66.类、类对象和实例对象

>>> a=C()

>>> b=C()

>>> c=C()

>>> a.count

0

>>> b.count

0

>>> c.count

0

>>> a.count+=10

>>> a.count

10

>>> b.count

0

>>> C.count

0

>>> C.count+=100

>>> C.count

100

>>> c.count

100

>>> b.count

100

>>> a.count

10

#

类定义          C 

类对象          C

实例对象  a    b  c  #当c.ount+=10的是时候是生成了一个对象属性 count=10 以后再调用c.count则输出是10,因为对象属性把类属性给覆盖了

67.属性与方法名字相同则属性会覆盖方法

>>> class C:

   def x(self):

      print('X-man!')

>>> c=C()

>>> c.x()

X-man!

>>> c.x=1

>>> c.x

1

>>> c.x()

Traceback (most recent call last):# c的对象属性x把c的方法x()给覆盖掉了

 File "", line 1, in

   c.x()

TypeError: 'int' object is not callable

68.到底什么是绑定?

python严格要求方法需要有实例才能被调用,这种限制其实就是python所谓的绑定概念

>>> class CC:

   def setxy(self,x,y):

      self.x=x

      self.y=y

   def printXY(self):

      print(self.x,self.y)

>>> dd=CC()

>>> dd.__dict__

{}

>>> CC.__dict__

mappingproxy({'__module__': '__main__', 'setxy': , '__weakref__': , '__dict__': , 'printXY': , '__doc__': None})

>>> dd.setxy(4,5)

>>> dd.__dict__

{'y': 5, 'x': 4}

>>> CC.__dict__

mappingproxy({'__module__': '__main__', 'setxy': , '__weakref__': , '__dict__': , 'printXY': , '__doc__': None})

>>> del CC

>>> cc=CC()

Traceback (most recent call last):

 File "", line 1, in

   cc=CC()

NameError: name 'CC' is not defined

>>> dd.printXY()

4 5

69.与类和对象相关的VBIF

1)issubclass(class,classinfo):class是classinfo的子类则返回True如果不是则抛出typeError,非严格检查,

一个类是自己的子类

classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,则返回True

>>> class A:

   pass

>>> class B(A):

   pass

>>> issubclass(B,A)

True

>>> issubclass(B,B)

True

>>> issubclass(B,object)

True

>>> class C:

   pass

>>> issubclass(B,C)

False

2)isinstance(object,classinfo):检查一个实例对象是否属于一个类,boject是一个实例对象,classinfo是一个类(这个也可以是一个候选类组成的元组),如果是则返回True,第一个object如果不是对象则永远返回False,如果第二个参数不是类或者由类对象组成的元祖,会抛出一个TypeError的异常

>>> class A:

   pass

>>> class B(A):

   pass

>>> issubclass(B,A)

True

>>> issubclass(B,B)

True

>>> issubclass(B,object)

True

>>> class C:

   pass

>>> issubclass(B,C)

False

>>>

>>>

>>> b1=B()

>>> isinstance(b1,B)

True

>>> isinstance(b1,A)

True

>>> isinstance(b1,C)

False

>>> isinstance(b1,(A,B))

True

3)hasattr(object,name):测试一个对象是否由指定的属性,对象就是boject,name就是属性名,name需要用引号

>>> class C:

   def __init__(self,x=0):

      self.x=x

>>> c1=C()

>>> hasattr(c1,'x')

True

>>> hasattr(c1,x)

Traceback (most recent call last):

 File "", line 1, in

   hasattr(c1,x)

NameError: name 'x' is not defined

4)getattr(object,name[,default]):返回对象object指定的属性name的返回值,如果只当属性不存在则把default参数打印出来,否则将抛出attributeError异常

>>> class C:

   def __init__(self,x=0):

      self.x=x

>>> c1=C()

>>> hasattr(c1,'x')

True

>>> hasattr(c1,x)

Traceback (most recent call last):

 File "", line 1, in

   hasattr(c1,x)

NameError: name 'x' is not defined

>>> getattr(c1,'x')

0

>>> getattr(c1,'y')

Traceback (most recent call last):

 File "", line 1, in

   getattr(c1,'y')

AttributeError: 'C' object has no attribute 'y'

>>> getattr(c1,'y','您访问的属性不存在')

'您访问的属性不存在'

5)setattr(object,name,value):设置对象中指定属性的值,如果属性不存在则用value设置

>>> setattr(c1,'y',19)

>>> getattr(c1,'y')

19

6)delattr(object,name)删除对象object中指定的name属性

>>> delattr(c1,'y')

>>> getattr(c1,'y','您访问的属性不存在')

'您访问的属性不存在'

>>> delattr(c1,'c')

Traceback (most recent call last):

 File "", line 1, in

   delattr(c1,'c')

AttributeError: c

7)property(fget=None,fset=None,fdel=None,doc=None):通过属性设置属性,设置一个属性x,这个属性的作用是去设置已经定义好的属性

fget:获得属性方法

fset:设属性方法

fdel:删除属性方法

以后执行c1.x会执行fget方法

以后执行c1.x=值会执行fset方法

以后执行del c1.x 会执行fdel方法

>>> class C:

   def __init__(self,size=10):

      self.size=size

   def getSize(self):

      return self.size

   def setSize(self,value):

      self.size=value

   def delSize(self):

      del self.size

   x=property(getSize,setSize,delSize)

>>> c1=C()

>>> c1.getSize()

10

>>> c1.x

10

>>> c1.x=18

>>> c1.x

18

>>> c1.size

18

>>> del c1.x

>>> c1.size

Traceback (most recent call last):

 File "", line 1, in

   c1.size

AttributeError: 'C' object has no attribute 'size'

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 70.魔法方法:http://bbs.fishc.com/forum.php?mod=viewthread&tid...
    杨大菲阅读 661评论 0 0
  • 佛系:顾名思义,代表一种不以物喜,不以己悲,以“一切随缘”为精神指导的生活态度,在不知不觉中,把佛主“无欲无求”的...
    无色口红阅读 820评论 9 6
  • 《超级个体》提问官古典的每日一问:26/30 阅读这篇关于碎片化学习的文章。你是如何利用碎片化学习提高学习效率的?...
    小霞儿阅读 292评论 0 0
  • 1. 我的故乡 那是中国北方的一个小乡村,放眼望去,无边无垠的平原尽收眼底。村里生活着几百口朴实的农民,他们日出而...
    大力稳重阅读 3,626评论 221 178