类的继承笔记

特征:封装,继承,多态

对象的方法 self 参数 (相当于c++中的this指针)

>>> class Ball:

def setName(self,name):

self.name = name

def kick(self):

print("我叫%s" % self.name)

>>> a = Ball()

>>> a.setName('球A')

>>> b = Ball()

>>> b.setName('球B')

>>> c = Ball()

>>> c.setName('土豆')

>>> a.kick()

我叫球A

>>> b.kick()

我叫球B

>>> c.kick()

我叫土豆

------------------------------------------------------------

公有和私有  在对象中加入 __ 会变成私有,私有对象不能被直接调用出来

>>> class Person:

__name = "stlaker"

>>> p=Person()

>>> p.__name  #直接调用会调用失败

Traceback (most recent call last):

  File "<pyshell#36>", line 1, in <module>

    p.__name

AttributeError: 'Person' object has no attribute '__name'

>>> class Person:

__name = "stlaker"

def getName(self):

return self.__name

>>> p=Person()

>>> p.getName()

'stlaker'

>>> p._Person__name

'stlaker'

------------------------------------------------------------

继承:

子类   基类,父类或超类

class DerivedClassName(BaseClassName):

...

>>> class Child(parent):

pass

>>> p = parent()

>>> p.hello()

正在调用父类方法

>>> c  = Child()

>>> c.hello()

正在调用父类方法

#如果子类中定义与父类同名的方法或属性,则会自动覆盖

#父类对应的方法或属性

>>> class Child(parent):

def hello(self):

print("正在调用子类的方法")

>>> c=Child()

>>> c.hello()

正在调用子类的方法

#在继承父类的方法后,如果对__init__进行了重载 如果需要使用父类的__init__可以使用:

#-调用未绑定的父类方法

#-调用super函数

具体查看 类的继承.py

继承可以多重继承:

class DerivedClassName(Base1,Base2,Base3,):

#多重继承

class Base1:

    def foo1(self):

        print("1")

class Base2:

    def foo2(self):

        print("2")

class C(Base1,Base2):

    pass

>>>c=C()

>>>c.foo1()

1

>>>c.foo2()

2

------------------------------------------------------------

#组合

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))

#>>> pool = Pool(1,10)

#>>> pool.print_num()

#池里总共有乌龟 1 只,鱼 10 条

-不要试图在一个类里面定义出所有能想到的特性和方法,应该利用继承和

组合机制来进行扩展

-用不同的词性命名,如属性名用名词,方法名用动词

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

>>> class CC:

def setXY(self,x,y):

self.x = x

self.y = y

>>> 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': <function CC.setXY at 0x0000020DCDE93488>, 'printXY': <function CC.printXY at 0x0000020DCDE93510>, '__dict__': <attribute '__dict__' of 'CC' objects>, '__weakref__': <attribute '__weakref__' of 'CC' objects>, '__doc__': None})

>>> dd.setXY(4,5)

>>> dd.__dict__

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

>>> CC.__dict__

mappingproxy({'__module__': '__main__', 'setXY': <function CC.setXY at 0x0000020DCDE93488>, 'printXY': <function CC.printXY at 0x0000020DCDE93510>, '__dict__': <attribute '__dict__' of 'CC' objects>, '__weakref__': <attribute '__weakref__' of 'CC' objects>, '__doc__': None})

(实例化相当于dd.setXY(dd,4,5))

-类中定义的属性是静态对象,即时类被删除,实例化的对象也能使用

------------------------------------------------------

相关的BIF(内置函数)    (object:指对象)

1.一个类被认为是其自身的子类

issubclass(class,classinfo)

返回 True 或 False

2.检查一个实例对象是否属于一个类

- 如果第一个参数不是一个对象,则永远返回false

- 如果第二个参数不是类或者由类对象组成的元祖,会抛出一个TypeError异常

isinstance(object,classinfo)

返回 True 或 False

3.访问对象的属性

- attr = attribute:属性

hasattr(object,name)

返回对象指定的属性值

getattr(object,name[,default])

设置对象中指定的值,如果不存在,则直接创建并赋值

setattr(object,name,value)

删除对象中指定的属性,如果对象不存在,则抛出异常

delattr(object,name)

>>> class A:

pass

>>> class B(A):

pass

>>> issbuclass(B,A)

Traceback (most recent call last):

  File "<pyshell#35>", line 1, in <module>

    issbuclass(B,A)

NameError: name 'issbuclass' is not defined

>>> 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

>>> class C:

def __init__(self,x=0)

SyntaxError: invalid syntax

>>> class C:

def __init__(self,x=0):

self.x = x

>>> c1 = C()

>>> hasattr(c1,'x')

True

>>> getattr(c1,'x')

0

>>> getattr(c1,'y')

Traceback (most recent call last):

  File "<pyshell#56>", line 1, in <module>

    getattr(c1,'y')

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

>>> getattr(c1,'y','您所访问的内容不存在')

'您所访问的内容不存在'

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

>>> getattr(c1,'y')

20

>>> delattr(c1,'y')

>>> delattr(c1,'y')

Traceback (most recent call last):

  File "<pyshell#61>", line 1, in <module>

    delattr(c1,'y')

AttributeError: y

通过属性来设置属性

获得属性的方法  设置属性的方法  删除属性的方法

property(fget = None , fset=None, fdel = None,dec=None)

>>> 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

>>> c1.getSize()

18

>>> del c1.x

>>> c1.size

Traceback (most recent call last):

  File "<pyshell#81>", line 1, in <module>

    c1.size

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

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

推荐阅读更多精彩内容

  • 1 自我就是思想,思想就是语言,语言就是存在的家。 自我是有关自身信念的集合。有关自身的信念包括:你是谁?你要做谁...
    心智整合阅读 1,064评论 0 0
  • 作家程子扬是个很奇怪的人。这个名字也是在很偶然的情形下得到的,他自诩为作家,其实那个时候他还不是作家。 于百无聊赖...
    麻麻麻辣烫阅读 262评论 0 0
  • 对自己每天的日程做了总结和规划,发现我没有练瑜伽的时间!要做改进,把瑜伽添加到每天的日程当中!
    佳佳EVERYDAY阅读 219评论 0 2
  • 10月17日,星期二,晴 因为正在讲有关民族的知识,所以,昨天留了一项家庭作业——让宝贝们回家问问家长,自己是哪个...
    如伊老师阅读 490评论 0 7