返回顶部

[python面向对象]--基础篇

1.#
    #类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
    #定义一个类
    class bar:
        def foo(self,agr):
            print(self,agr)
    obj = bar()
    print(obj)
    print(obj.foo("调用类的方法"))
2.#方法
    #把函数写在类里就是方法
    #构造方法
    #普通方法
        class person:
            def __init__(self,name,age):
                #构造方法的特性,调用   类名() 后,自动执行构造方法
                #self 谁调用类,谁就是self
                self.n = name
                self.a = age
                self.xue = 0
            def show(self):   #普通方法
                print("%s--%s"%(self.n,self.a))
        obj = person("haha",20)

        obj.show()
3.#面向对象三大特性之一:封装
    class bar:
        def __init__(self,n,a):
            self.name = n
            self.age = a
            self.xun = 0
    b1 = bar("zhangw",11)
    b2 = bar("haha",31)
4.#面向对象三大特性之二:继承
    #self永远是执行该方法的调用者
    #继承
    class 父类:
        pass
    class 子类(父类):
        pass
    #子类可以调用父类的方法
    #如果子类中有和父类一样的方法名,则优先调用自己的,也就是重写
    #重写,防止执行父类的方法
    #重写后,如果想要执行父类的方法
        1.#super(子类,self).父类中的方法()
        2.#父类名,父类中的方法(self,...)

    #python中支持多继承
        #原则
            #1.左侧优先,这里的左侧指的是调用的时候,比如:class zilei(fulei1,fulei2),fulei1 优先
            #2.左侧找完再找右侧
            #3。如果左右两侧最后汇聚到同一个根,则最后找根


5.#面向对象三大特性之三:多态
    #原生多态,“鸭子类型”
        #当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子
    class F1:
        pass
    class S1(F1):
        def show(self):
            print(S1.show)
    class S2(F1):
        def show(self):
            print(S2.show)
    def Func(obj):
        print(obj.show())
    s1_obj = S1()
    Func(s1_obj)
    s2_obj = S2()
    Func(s2_obj)

6.#类成员
    #字段
        #普通字段,保存在对象中,只能通过对象访问
        #静态字段,保存在类中,可以用个类,或者对象访问
    #方法
        #普通方法,保存在类中,由对象直接调用,self = > 对象
        #静态方法,保存在类中,由类直接调用
        #类方法,保存在类中,由类直接调用cls = >当前类
    class province:
        country = "中国"
        def __init__(self,name):
            self.name = name
        @staticmethod   #静态方法
        def jingtai():
            print("我是静态方法,不需要对象")
        @classmethod   #类方法
        def classmd(cls):
            print(cls)
            print("haha")
    print(province.country)
    hebei = province("河北")
    print(hebei.name)

    province.jingtai()
    province.classmd()

    #属性,特性
        #@property
    # 由属性的定义和调用要注意一下几点:
    # 定义时,在普通方法的基础上添加 @property 装饰器;
    # 定义时,属性仅有一个self参数
    # 调用时,无需括号
        # 方法:foo_obj.func()
        #属性:foo_obj.prop
    # ############### 定义属性 ###############
    class Goods(object):
        @property
        def price(self):
            print(property)
        @price.setter
        def price(self, val):
            print(val)
        @price.deleter
        def price(self):
            print(666)
    # ############### 调用 ###############
    #obj = Goods()
    #obj.price          # 自动执行 @property 修饰的 price 方法,并获取方法的返回值
    #obj.price = 123    # 自动执行 @price.setter 修饰的 price 方法,并将  123 赋值给方法的参数
    #del obj.price      # 自动执行 @price.deleter 修饰的 price 方法

 

posted @ 2016-09-22 11:44  Will_D_Zhang  阅读(165)  评论(0编辑  收藏  举报