zoukankan      html  css  js  c++  java
  • 类中的装饰器(property classmethod staticmethod)与继承

    第一部分:上节课复习

    1.类与对象

      对象是盛放数据和功能的容器

      类存放的对象相似的数据与功能的容器

    2.类和对象的使用

    class student:

        n=0

        def __init__(self,name,age,gender):

            student.n+=1

            self.name=name

            self.age=age

            self.gender=gender

        def choose(self):

            pass

        

    obj1=student('egon',18,'male')

    obj2=student('tom',19,'male')

    print(obj1.n)或者student.n

    结果为:2每调用一次类n的值就加1,总共调用了两次的类

     

     

     

    二:今日内容

    1.一切皆对象

    一般的数据类型(intstr)都是内置的类

    l1=list([1,2,3])

    list.append(l1,4)

    print(l1)

    结果是:[1,2,3,4]

     

    2.类内的装饰器

    (1) property

    例子1class people:

        def __init__(self,name,weight,height):

            self.name=name

            self.weight=weight

            self.height=height

        @property                                                            #作用在于p1.bmi()在调用时候可以不用括号

        def bmi(self):

            return self.weight/(self.height**2)

    p1=people('ehon',65,1.73)

    print(p1.bmi)

     

    例子2~实现访问,修改,删除

    property

    class People:

        def __init__(self,name):

            self.__name=name

        @property   

        def name(self):

            return self.__name

     

        @name.setter

        def name(self,x):

            if type(x) is not str:

                raise Exception('名字必须是字符串类型')

            self.__name=x

     

        @name.deleter

        def name(self):

            print('不允许删除')

     

    p1=People('egon')

    print(p1.name)

    p1.name='EGON'

    del p1.name

    print(p1.name)

    结果是:

    egon

    不允许删除

    EGON

     

    3.绑定方法与非绑定方法

    3.1绑定方法和非绑定方法

    绑定方法:绑定给谁就有谁来调用,谁来调用就会将自己当做第一个参数传入

    非绑定方法:不与类和对象绑定,意味着谁来调都可以,但无论谁来调都是一个普通的函数,没有自动传参的效果

    3.2

    class people:

        def __init__(self,name):

            self.name=name

    #但凡在类中定义一个函数,默认就是绑定给对象的,应该由对象进行调用会将对象当做第一个参数自动传入

        def tell(self):

            print(self.name)

    #类中定义的函数被classmethod装饰过,就绑定给类,应该由类进行调用类来调用会把类半身当做第一个参数自动传入

        @classmethod

        def f1(cls):  #cls=people

            print(cls)

    #类中定义的函数被staticmethod装饰过,就成了一个非绑定的方法,既是一个普通的函数,都可以调用,但无论谁来调用都是一个普通的函数,没有自动传参的效果

        @staticmethod

        def f2(x,y):

            print(x,y)

    p1=people('egon')

     

    例子2

    import  setting

    class people:

        def __init__(self,name,age,gender):

            self.name=name

            self.age=age

            self.gender=gender

     

        def tell_info(self):

            print('<%s:%s:%s' %(self.name,self.age,self.gender))

     

        @classmethod

        def from_conf(cls):

            print(cls)

            return cls(setting.NAME,setting.AGE,setting.GENDER)

     

        @staticmethod

        def create_id():

            import uuid

            return uuid.uuid1()

     

     4.面向对象---继承

    4.1 继承四创建新类的一种方式,新建的类称之为子类,被继承的类称之为父类,基类,超类;类是用来解决对象之间的冗余问题的,而继承则是解决类与类之间的冗余问题的

    4.2 继承的特点:子类可以遗传父类的属性

    单继承与多继承  经典式与新式  强耦合型与扩展性相悖

     

    5.先抽象再继承

    用来查找类与类之间的关系,先找对象总结出一个类,如果有必要再总结出父类

     

    5.单继承背景下的属性查找

    查找顺序或者原则:先从对象里找,再从类中中,再从父类找

    例子1

    class Bar:

        def f1(self):

            print('Bar.f1')

     

        def f2(self):

            print('Bar.f2')

            self.f1()

     

    class Foo(Bar):

        def f1(self):

            print('Foo.f1')

     

    obj=Foo()

    obj.f2()     

    #obj对象本身没有f2,故向Foo()找,但是Foo()中也没有向Foo()的父类Bar所以执行了print('Bar.f2')。到达self.f1()时,self.f1()=obj.f1()也是先找obj,再找Foo

    结果是:

    Bar.f2

    Foo.f1

  • 相关阅读:
    《应用Yii1.1和PHP5进行敏捷Web开发》学习笔记(转)
    YII 小模块功能
    Netbeans代码配色主题大搜集
    opensuse 启动巨慢 解决方法 90s多
    opensuse 安装 网易云音乐 rpm netease music
    linux qq rpm deb opensuse
    openSUSE 安装 alien
    第一行代码 Android 第2版
    Android Studio AVD 虚拟机 联网 失败
    docker error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.29/containers/json: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuratio
  • 原文地址:https://www.cnblogs.com/dayday-up-a/p/14263827.html
Copyright © 2011-2022 走看看