-
定义继承类需注意:
1、子类定义的时候,需要在括号内写明继承的类;
2、在__init__()方法,需要调用super(Student, self).__init__(name, gender),来初始化从父类继承过来的属性;查看全部 -
利用filter()函数,可以完成很多很有用的功能,例如,删除 None 或者空字符串:
def is_not_empty(s): return s and len(s.strip()) > 0 for item in filter(is_not_empty, ['test', None, '', 'str', ' ', 'END']): print(item) ## test, str, END
注意: s.strip()会默认删除空白字符(包括'\n', '\r', '\t', ' '),如下:
s = ' 123' s.strip() # ==> 123 s= '\t\t123\r\n' s.strip() # ==> 123
查看全部 -
如果要限制添加的属性,例如,Student类只允许添加 name、gender和score 这3个属性,就可以利用Python的一个特殊的__slots__来实现。
class Student(object): __slots__ = ('name', 'gender', 'score') def __init__(self, name, gender, score): self.name = name self.gender = gender self.score = score
使用__slots__ = ('name', 'gender', 'score') 限定Student类的属性,这个时候在外部再次添加动态属性age,将会报错。
查看全部 -
python中的多态
在实际调用的时候,会首先查找自身的定义,如果自身有定义,则优先使用自己定义的函数;如果没有定义,则顺着继承链向上找。
python中的多重继承
查看全部 -
在继承链上,一个父类的实例不能是子类类型,因为子类比父类多了一些属性和方法。
在一条继承链上,一个实例可以看成它本身的类型,也可以看成它父类的类型。
查看全部 -
如果类属性和实例属性名字相同时,会怎么样,这就涉及Python中类属性和实例属性的优先级的问题了。
在类属性和实例属性同时存在的情况下,实例属性的优先级是要高于类属性的
但是通过实例是无法修改类的属性的,通过实例方法修改类属性,只是给实例绑定了一个对应的实例属性
查看全部 -
1、class Student()定义的时候,需要在括号内写明继承的类Person
2、在__init__()方法,需要调用super(Student, self).__init__(name, gender),来初始化从父类继承过来的属性
查看全部 -
1、类方法需要使用@classmethod来标记为类方法,否则定义的还是实例方法
2、类方法的第一个参数将传入类本
查看全部 -
1、外部需要操作私有属性时,通过定义类或者实例的方法来操作私有属性
2、实例的方法就是在类中定义一个函数,而该函数的第一个必须是self,用于指向调用该方法的实例对象本身
3、外部调用是无需显式传递self参数
4、可以把和类的实例有关的操作都抽象成实例方法
查看全部 -
类的私有属性不能被外部的对象访问,只能在内部访问
查看全部 -
1、在类属性和实例属性同时存在的情况下,实例属性的优先级是要高于类属性的,在操作实例的时候,优先是操作实例的属性。
2、当实例没有和类同名的时候,通过实例对象,依然可以访问到类属性
3、可见通过实例是无法修改类的属性的,事实上,通过实例方法修改类属性,只是给实例绑定了一个对应的实例属性
4、 类属性前面加上__变为私有属性和私有方法、以及子类都不能通过对象直接访问,但是可以在本内部访问
查看全部 -
1、实例是根据类创建的对象,实例的属性值对该实例有影响,,类的属性不属于任何一个对象,是属于类,所有实例都可以访问该属性
2、实例恶属性每个实例各自拥有,互相独立,而类属性有且只有一份,可以动态添加和修改
查看全部 -
1、类名首字母大写
查看全部 -
所以,带参数的log函数首先返回一个decorator函数,再让这个decorator函数接收my_func并返回新函数,相当于是在原有的二层嵌套里面,增加了一层嵌套
查看全部 -
要让 @log 自适应任何参数定义的函数,可以利用Python的 args 和 *kwargs,保证任意个数的参数总是能正常调用:
查看全部
举报