美文网首页
鱼C-python之 类& 对象

鱼C-python之 类& 对象

作者: 飞翼_U | 来源:发表于2017-03-21 16:53 被阅读0次

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

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

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

相关文章

  • Python Interpreter & Distributio

    C-Python Python's official interpreter. c-python is based...

  • 鱼C-python之迭代器

    给个很熟悉的例子 迭代就是循环的意思,用来循环的容器就是迭代器。 关于迭代器有2个内置函数,便是 iter() 和...

  • 鱼C-python之魔法方法

    何为魔法方法? 魔法方法总是被双下划线包围,例如:__init__ 构造和析构 重写 __new__ 方法,返回的...

  • 鱼C-python之算术操作符

  • 鱼C-python之图形用户界面入门

    如论是大学时候学习C、JAVA ,还是现在的python,我都觉得 图形用户界面是最好玩的,因为可以互动啊,可以看...

  • Runtime 与 Aspects

    Runtime 之 isa指针 1.横向看:实例是对象,类也是对象(类对象),meta类也是对象(原类对象)这是很...

  • 定义动物为类。那么鸡鸭鱼就是对象。{}内的东西对象中的成员。 与struct比较,类中{}内可以定义函数。在对象中...

  • 什么是面向对象

    一切皆为对象;猫、鱼的父类是动物;鱼可以游泳这就是鱼的特性(属性);猫的特性(属性)就是爬树。

  • Runtime之对象,类

    对象 我们知道对象是某个类的实例,并且这个对象的isa指针指向它所属的类。来看一下它的定义,实际上是一个objc_...

  • 慕课网-C++远征之封装篇(下)-学习笔记

    C++远征之封装篇(下) c++封装概述 类 & 对象 对象+数据成员 = 对象成员 对象 + 数组 = 对象数组...

网友评论

      本文标题:鱼C-python之 类& 对象

      本文链接:https://www.haomeiwen.com/subject/owconttx.html