为了账号安全,请及时绑定邮箱和手机立即绑定
  • Python的除法可以分为地板除(你没看错,就是地板)和普通除法,地板除的特殊方法是__floordiv__,普通除法是__truediv__。
    地板除法和普通除法不一样,地板除法的结果只会向下取整数。

    查看全部
  • __str__()函数似乎没有在自定义类Person中生效,这是为什么呢?
    这是因为 Python 定义了__str()__和__repr__()两种方法,__str()__用于显示给用户,而__repr__()用于显示给开发人员,当使用str()时,实际调用的是__str__()方法,而直接输入变量,调用的是__repr__()方法。

    查看全部
  • 通过type()函数,可以获得变量的类型。

    n = 1
    s = 'this is a string'
    type(n) # ==> <class 'int'>
    type(s) # ==> <class 'str'>



    通过dir()方法,可以获取变量的所有属性:

    >>> n = 1
    >>> dir(n)
    ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', ...]
    >>> s = 'this is a string'
    >>> dir(s)
    ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', ...]

    在dir列出的属性中,有很多是以下划线开头和结尾的,这些都是特殊的方法,称为内建方法,在后面,我们还会学习这些方法。

    dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要用 getattr() 和 setattr( )函数了。

    >>> getattr(p, 'name') # 获取name属性
    'Alice'
    >>> setattr(p, 'name', 'Adam') # 设置新的name属性
    >>> s.name
    'Adam'


    查看全部
  • 这时有必要去判断数据的类型,通过函数isinstance()可以判断一个变量的类型。

    class Person(object):
        def __init__(self, name, gender):
            self.name = name
            self.gender = gender
    
    class Student(Person):
        def __init__(self, name, gender, score):
            super(Student, self).__init__(name, gender)
            self.score = score
    
    class Teacher(Person):
        def __init__(self, name, gender, course):
            super(Teacher, self).__init__(name, gender)
            self.course = course
    
    p = Person('Tim', 'Male')
    s = Student('Bob', 'Male', 88)
    t = Teacher('Alice', 'Female', 'English')

    当我们拿到变量 p、s、t 时,可以使用 isinstance 判断类型:

    >>> isinstance(p, Person)
    True # p是Person类型
    >>> isinstance(p, Student)
    False # p不是Student类型
    >>> isinstance(p, Teacher)
    False # p不是Teacher类型

    这说明在继承链上,一个父类的实例不能是子类类型,因为子类比父类多了一些属性和方法。

    s 是Student类型,不是Teacher类型,这很容易理解。但是,s 也是Person类型,因为Student继承自Person,虽然它比Person多了一些属性和方法,但是,把 s 看成Person的实例也是可以的。


    isinstance也可以用于Python自有数据类型的判断。

    s = 'this is a string.'
    n = 10
    isinstance(s, int) # ==> False
    isinstance(n, str) # ==> False


    查看全部
    0 采集 收起 来源:Python判断类型

    2020-10-04

  • 在定义Student类的时候,由于继承了Person类,所以Student类自动拥有name、gender属性,因此,在定义Student类的时候,只需要把额外的属性加上即可。

    class Student(Person):
        def __init__(self, name, gender, score):
            super(Student, self).__init__(name, gender)
            self.score = score
    
    student = Student('Alice', 'girl', 100)
    print(student.name) # ==> Alice
    print(student.gender) # ==> girl
    print(student.score) # ==> 100

    在定义继承类的时候,有几点是需要注意的:

    1. class Student()定义的时候,需要在括号内写明继承的类Person

    2. 在__init__()方法,需要调用super(Student, self).__init__(name, gender),来初始化从父类继承过来的属性


    查看全部
    0 采集 收起 来源:Python继承类

    2020-10-04

  • 在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。
    要在class中定义类方法,需要这么写:

    class Animal(object):
        __localtion = 'Asia'
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        @classmethod
        def set_localtion(cls, localtion):
            cls.__localtion = localtion
    
        @classmethod
        def get_localtion(cls):
            return cls.__localtion
    
    print(Animal.get_localtion()) # ==> Asia
    Animal.set_localtion('Afica')
    print(Animal.get_localtion()) # ==> Africa

    和实例方法不同的是,这里有两点需要特别注意:

    1. 类方法需要使用@classmethod来标记为类方法,否则定义的还是实例方法

    2. 类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.__localtion 实际上相当于Animal.__localtion。

           因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。


    查看全部
  • 私有属性没有办法从外部访问,只能在类的内部操作;那如果外部需要操作私有属性怎么办?这个时候可以通过定义类或者实例的方法来操作私有属性.

    class Person(object):
    
        def __init__(self, name):
            self.__name = name
    
        def get_name(self):
            return self.__name

    name是实例的私有属性,从外部是无法访问的,而get_name(self) 就是一个实例方法,在实例方法里面是可以操作私有属性的,注意,它的第一个参数是self。
    另外,__init__(self, name)其实也可看做是一个特殊的实例方法。
    通过定义get_name(self)方法,在外部就可以通过这个方法访问私有属性了。

    p = Person('Alice')
    print(p.get_name()) # ==> Alice


    查看全部
  • 通过input()函数,输入的是字符串,需要转型为数字类型。

    查看全部
  • Python的sys.path返回的是一个路径列表,因此可以操作列表里面的元素,请通过sys.path增加路径'../',使得在运行时,可以导入当前目录上级目录的包。


    import sys
    sys.path.append('../')


    查看全部
  • Python使用import语句导入一个模块

    如果希望导入模块的指定部分属性或函数,那么使用from...import...语句

    如果希望导入模块里面的所有内容,那么使用from ...import *语句。

    如果从一个模块导入函数,有可能会遇到导入的函数与本文件的函数冲突的情况。例如:本文件定义了一个pow()函数,同时从math模块也导入了一个pow()函数,这种情况下就会引起冲突;事实上,这种冲突的情况经常发生。
    有两种方法可以解决这个问题,第一种是直接导入模块,不指定导入模块里面的具体内容;第二种方法就是使用from ... import as ...语句,as类似重命名,可以把导入的函数或属性重命名为别的名字。

    查看全部
    0 采集 收起 来源:Python导入模块

    2020-09-28

  • 在Python中,函数其实是一个对象,我们可以将一个函数赋值给一个变量,而不改变函数的功能。

    如果把一个类实例也变成一个可调用对象,可以实现一个特殊的方法__call__()。

    查看全部
  • 由于Python是动态语言,任何实例在运行期都可以动态地添加属性。

    如果要限制添加的属性,就可以利用Python的一个特殊的__slots__来实现。

    __slots__的目的是限制当前类所能拥有的属性,避免因为外部属性的操作导致类属性越来越难以管理。

    查看全部
  • 如果一个类表现得像一个list,想使用len()函数来获取元素个数时,则需要实现__len__()方法。

    查看全部
  • Python 定义了__str()__和__repr__()两种方法,__str()__用于显示给用户,而__repr__()用于显示给开发人员,当使用str()时,实际调用的是__str__()方法,而直接输入变量,调用的是__repr__()方法。

    查看全部
  • 类的特殊方法:
    1. 双下划线开头

    2.双下划线结束

    3.每个Python对象都拥有特殊方法

    查看全部

举报

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

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

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