鱼C-python之 类& 对象

对象 = 属性 + 方法
一个关于类的简单例子:

class Turtle: #python中的类名约定以大写字母开头
    #属性
    color = 'green'
    weight = 10
    legs = 4
    shell = True
    amouth = '大嘴'

  #方法:
    def climb(self):
        print("我正努力的向前爬....")
    def run(self):
        print("我正飞快的向前跑....")
    def bite(self):
        print("咬死你咬死你!!")
    def eat(self):
        print("有吃的,好开心")
    def sleep(self):
        print("睡觉吧,Zzzz")

运行后调用结果如下:

======================= RESTART: D:/Python35/c/lei.py =======================
>>> tt = Turtle()
>>> tt.climb()
我正努力的向前爬....
>>> tt.run()
我正飞快的向前跑....
>>> tt.bite()
咬死你咬死你!!
>>> 

面向对象的三个特征:
1)封装:就是属性和方法放在一起,也是一种信息隐蔽技术,因为调用的时候只是告诉方法的名字,不关系方法里面具体是如何实现的。
比如下面的sort()方法只是知道它有排序的作用,就调用它实现排序,但是里面具体怎么实现的我们并不清楚:

>>> list = [1,5,3,6,8]
>>> list.sort()
>>> list
[1, 3, 5, 6, 8]
>>> 

2)继承:即子类自动共享父类之间的数据和方法

>>> 
>>> class Parent:
    def hello(self):
        print("正在调用父类的方法")

        
>>> class Child(Parent):
    pass

>>> p = Parent()
>>> p.hello()
正在调用父类的方法
>>> c = Child()
>>> c.hello()
正在调用父类的方法

3)多态:即不同对象对同一方法返回值不通
例子,

>>> 
>>> class A:
    def fun(self):
        print("我是小A")
>>> class B:
    def fun(self):
        print("我是小B")
>>> a = A()
>>> a.fun()
我是小A
>>> b = B()
>>> b.fun()
我是小B


类 是图纸, 根据 类实例化后的对象才是房子,就像上面的例子,A是类(图纸),a是实例化后的对象(房子)

self 是什么

解释:和c里面的 this差不多,代表调用自身。
例子:

>>> class Ball:
    def setName(self,name):
        self.name = name
    def tick(self):
        print("我是%s,该死的谁踢我" % self.name)
        
>>> a = Ball()
>>> a.setName('篮球')
>>> 
>>> c = Ball()
>>> c.setName('土豆')
>>> a.tick()
我是篮球,该死的谁踢我
>>> c.tick()
我是土豆,该死的谁踢我
>>> 

上面之所以A是篮球,C是土豆,就是因为 self去寻找各自的参数的。
我们只要记住 类 定义的时候把 self 写入第一个参数就好了。

特殊参数
__init__  #注意这里是2个下划线哦,作用是在定义参数的时候传入参数,也java里面的构造函数差不多
>>> 
>>> class Ball:
    def __init__(self,name):
        self.name = name
    def tick(self):
        print("我是%s,该死的谁踢我" % self.name)

>>> b = Ball('哈哈')
>>> 
>>> b.tick()
我是哈哈,该死的谁踢我
>>>
公有 和 私有
>>> class Person:
    name == 'gaoyx'
>>> a = Person()
>>> a.name
'gaoyx'
#以上是公有的,可以调用。
>>> #Python中如果定义私有变量只需要在变量名或者函数名前面加上“__”两个下划线,函数或者变量就会变为私有的了
>>> 
>>> class Person:
    __name = 'gaoyx'    
>>> a =Person()
>>> a.name
Traceback (most recent call last):
  File "<pyshell#181>", line 1, in <module>
    a.name
AttributeError: 'Person' object has no attribute 'name'
>>> a.__name
Traceback (most recent call last):
  File "<pyshell#182>", line 1, in <module>
    a.__name
AttributeError: 'Person' object has no attribute '__name'
 #如果想得到里面的私有变量值,可以这么做
>>> class Person: 
    __name = 'gaoyx'
    def getName(self):
        return self.__name

>>> p =Person()
>>> p.getName()
'gaoyx'
>>> 
>>> #其实还可以这么访问
>>> p._Person__name
'gaoyx'
>>> 因为Python把双下划线开头的变量改了名字,改为了 _类名__变量名

继承

在前面讲面向对象3个特征时候已经介绍过了,这里说一下,如果子类继了父类但是里面的某个方法被重新定义后,导致无法使用父类的方法,可以用这个解决:
在子类被重新定义的方法里面写上:

super().__init__()
#__init__是父类的防范

子类也可以继承多个父类,直接在()里面写多个父类的名字即可。

组合

当实体不像子类父类那样可以继承时,要是想放在一起可以使用组合,比如:定义一个类 叫水池,水池里面有乌龟和鱼。
例如:

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

总结:所谓的组合就是把类的实例化放到一个新类里面,就会把旧类组合进去。

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

推荐阅读更多精彩内容