• [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 方法
    人生短短数十载,经不起几次重头再来
  • 相关阅读:
    【leetcode】7. 反转整数
    【leetcode】496. 下一个更大元素 I
    【leetcode】389. 找不同
    Linux驱动模型解析bus之platform bus
    shell 和进程
    递归调用在循环体内: 把循环展开, 这种情况是先循环再递归
    javascript函数柯里化以及柯里化带来的好处
    Maven测试篇
    关于ECharts Java类库的一个jquery插件
    javascript原型链继承
  • 原文地址:https://www.cnblogs.com/bk770466199/p/5895714.html
Copyright © 2020-2023  润新知