-
如果要限制添加的属性,例如,Student类只允许添加 name、gender和score 这3个属性,就可以利用Python的一个特殊的__slots__来实现。
顾名思义,__slots__是指一个类允许的属性列表:
class Student(object): __slots__ = ('name', 'gender', 'score') def __init__(self, name, gender, score): self.name = name self.gender = gender self.score = score
__slots__的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用__slots__也能节省内存
查看全部 -
没有装饰器,代码本身就是定义的函数。s.grade ,返回函数名,位置。装饰器函数把 函数 方法“装饰”成属性调用
查看全部 -
@property就是把实例方法当做属性调用的语法,你看下面是直接print s.grade,相当于调用了grade这个属性,所以用@property.
@score.setter就是你用了 @property 就会产生一个 @***.setter 后面这个是用来设置前面那个类的参数的
查看全部 -
地板除法:用//表示,不管操作数为何种数值类型,总是会舍去小数部分,返回数字序列中比真正的商小的最接近的数字。比如 1//2 = 0, 1.0//2= 0。2. 传统除法:用/表示,对整数之间的/,执行地板除,但对有浮点数参与的除法则执行传统意义上的除法。比如 1/2 = 0, 1.0/2=0.
查看全部 -
__add__就是+号,类推...你不信可以把add改成其它字母,例如aaa,然后就运行不了报错了,这些都是内置的
减法运算:__sub__
乘法运算:__mul__
除法运算:__div__查看全部 -
self.numbers是实例的属性吗?为什么不放在def__init__(self,num)中?
已采纳回答 / weibo_倔强不屈的颜小贱95_0
self.numbers这个在__init__中赋值的,所以是这一类的实例的属性,你把numbers放到__init__的参数位子,你在实例化对象是就必须给它这么一个L,否则报错的。
查看全部 -
cmp返回的是-1,1,0。sorted在接收cmp返回的-1时,将比较的两个元素(x,y)里的x放前面;当cmp返回的1时,将比较的两个元素(x,y)里的y放前面
查看全部 -
如果要把一个类的实例变成 str,就需要实现特殊方法__str__():
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender)
因为 Python 定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。
有一个偷懒的定义__repr__的方法:
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender) __repr__ = __str__
查看全部 -
反复碰壁,反复碰壁
查看全部 -
setattr设置新的属性
查看全部 -
type() 函数获取变量的类型,它返回一个 Type 对象.
对于实例变量,dir()返回所有实例属性,包括`__class__`这类有特殊意义的属性。
dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要用 getattr() 和 setattr( )函数了:
查看全部 -
多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。
查看全部 -
动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。
查看全部 -
我们再考察 s :
>>> isinstance(s, Person) True # s是Person类型>>> isinstance(s, Student) True # s是Student类型>>> isinstance(s, Teacher) False # s不是Teacher类型
s 是Student类型,不是Teacher类型,这很容易理解。但是,s 也是Person类型,因为Student继承自Person,虽然它比Person多了一些属性和方法,但是,把 s 看成Person的实例也是可以的
查看全部 -
Person 是Student,Teacher的父类
当我们拿到变量 p、s、t 时,可以使用 isinstance 判断类型:
>>> isinstance(p, Person) True # p是Person类型>>> isinstance(p, Student) False # p不是Student类型>>> isinstance(p, Teacher) False # p不是Teacher类型
这说明在继承链上,一个父类的实例不能是子类类型,因为子类比父类多了一些属性和方法。
查看全部
举报