为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
python进阶_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 希望除了 name和gender 外,可以提供任意额外的关键字参数,并绑定到实例,请修改 Person 的 __init__()定 义,完成该功能。

    传入**kw 即可传入任意数量的参数,并通过 setattr() 绑定属性。


    class Person(object):


        def __init__(self, name, gender, **kw):

            self.name = name

            self.gender = gender

            for k,v in kw.iteritems():

                setattr(self,k,v)


    p = Person('Bob', 'Male', age=18, course='Python')

    print p.age

    print p.course


    查看全部
  • import math

    def add(x, y, f):

        return f(x) + f(y)

    print add(25, 9, math.sqrt) # 第三个变量表示的是一个函数,只需要是一个函数就行的


    查看全部
  • 判断s是否是类型,返回Boolean
    isinstance(s, Person)


    查看全部
  • class Student(Person):
       def __init__(self, name, gender, score):        super(Student, self).__init__(name, gender)
           self.score = score


    查看全部
  • class Person(object):

        def __init__(self, name, gender):

            self.name = name

            self.gender = gender

    class Teacher(Person):

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

            super(Teacher,self).__init__(name,gender)

            self.course=course


    t = Teacher('Alice', 'Female', 'English')

    print t.name

    print t.course


    查看全部
  • 通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count。

    查看全部
  • 当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。

    查看全部
  • 实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。

    因为类属性是直接绑定在类上的,所以,访问类属性不需要创建实例,就可以直接访问

    对一个实例调用类的属性也是可以访问的,所有实例都可以访问到它所属的类的属性:

    由于Python是动态语言,类属性也是可以动态添加和修改的:

    因为类属性只有一份,所以,当Person类的address改变时,所有实例访问到的类属性都改变了。


    查看全部
  • 可见,当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。

    查看全部
  • 任务

    请给 Person 类添加一个类属性 count,每创建一个实例,count 属性就加 1,这样就可以统计出一共创建了多少个 Person 的实例。

    • ?不会了怎么办

    • 由于创建实例必定会调用__init__()方法,所以在这里修改类属性 count 很合适。

      参考代码:

      class Person(object):
          count = 0
          def __init__(self, name):
              Person.count = Person.count + 1
              self.name = name
      p1 = Person('Bob')
      print Person.count# => 1p2 = Person('Alice')
      print Person.count# => 2p3 = Person('Tim')
      print Person.count# => 3


    查看全部
  • Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。


    可见,只有以双下划线开头的"__job"不能直接被外部访问。

    但是,如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义。

    以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。


    查看全部
  • __init__() 方法的第一个参数必须是 self,后续参数则可以自由指定

    相应地,创建实例时,就必须要提供除 self 以外的参数:

    可接受任意关键字参数,要定义关键字参数,使用 **kw;

    class Person(object):

        def __init__(self,name,gender,birth,**kw):

            self.name=name

            self.gender=gender

            self.birth=birth

            for k,v in kw.iteritems():

                setattr(self,k,v)


    xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student')


    print xiaoming.name

    print xiaoming.job


    查看全部
  • python是动态语言,类属性是可以动态添加和修改的

    查看全部
  • 匿名函数,lambda

    查看全部
  • 1.属性不想被外部访问,双下划线开头即可

    查看全部

举报

0/150
提交
取消
课程须知
本课程是Python入门的后续课程 1、掌握Python编程的基础知识 2、掌握Python函数的编写 3、对面向对象编程有所了解更佳
老师告诉你能学到什么?
1、什么是函数式编程 2、Python的函数式编程特点 3、Python的模块 4、Python面向对象编程 5、Python强大的定制类
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!