日期: 2022-09-21 05:37:00 浏览数:10

上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
广元做网站/制作网站/搭建网站/设计网站/开发网站-网站服务一站式

的二元方法运算符重载介绍的并不全面,文中介绍的全是正向方法,其实还有反向方法,就地方法。下面补充一些。
当解释器碰到 a+b 时,会做以下事情:
从 a 类中找 __add__ 若返回值不是 NotImplemented, 则调用 a.__add__(b)。
若 a 类中没有 __add__ 方法,则检查 b 有没有 __radd__ 。如果如果有,则调用 b.__radd__(a),若没有,则返回 NotImplemented。
接上条,若 b 也没有 __radd__ 方法,则抛出 TypeError,在错误消息中知名操作数类型不支持。
比如:向量类 <Myvector> 应当有向量与整数的乘法:
>>>a = Myvector([1,2,3])
>>>print(a.value)
[1,2,3]
>>>b=3
>>>c = a*b #此时调用Myvector.__mul__()
>>>print(c.value)
[3,6,9]
>>> d=b*a #这句会出错。
期望得到 b*a 也返回一个向量,b*a 应该等于 a*b。此时就需要在 Myvector 类中定义一个__rmul__方法。
def __rmul__(self, other):
if isinstance(other, int):
return Myvector([a*other for a in self.m])
每个运算符都有正向方法重载,反向方法重载。有一些有就地方法(即不返回新的对象,而是修改原本对象)。
兔子
兔子
8bi***gmail.com
3年前 (2019-08-02)
shunhwa
hex***ua617@sina.com
41
__str__函数
__str__ 是一个类的方法,在打印类对象,获取其属性信息时调用。打印一个实例化对象时,默认打印的其实时一个对象的地址,但是我们可以对其进行重载,打印我们想要的信息。例如上面的例子中进行的重载。
shunhwa
shunhwa
hex***ua617@sina.com
3年前 (2019-08-28)
小叶Little_Ye
lit***ye233@foxmail.com
14
在类的方法中直接修改 self 是无效操作,即使 self 变量的地址与实例地址相同:
class C:
def __init__(self, a):
self.a = a
def construct(self, a):
c = C(a)
self = c
def getid(self):
return id(self)
if __name__ == '__main__':
c1 = C(2)
c1.construct(3) # c1.a == 2
print(id(c1) == c1.getid()) # True
小叶Little_Ye
小叶Little_Ye
lit***ye233@foxmail.com
3年前 (2020-02-11)
日日夜夜
dwl***t30@gmail.com
66
事实上 class 的私有属性在外部也是可以访问的我们可以看下文中的例子。
#!/usr/bin/python3
class People:
def __init__(self, name, age, ):
self.name = name
self.age = age
self.__privater_var = 10
def intro(self):
print(f'My name is {self.name},I'm {self.age}')
def get_var(self):
print(self.__privater_var)
def set_var(self, var):
self.__privater_var = var
someone = People(name='jack', age=
广元做网站/制作网站/搭建网站/设计网站/开发网站-网站服务一站式
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)
际上,对于类 A, 实例化时不需要参数;而对于类 B,实例化时需要输入 (x, y) 参数,这才是两者的核心区别。定义类时,若需要输入参数,则一般必须使用 __init__()方法;若不需要输入参数,是否使用 __init__() 方法都可以。
和版本是否对类的构造函数进行了精简,关系不大。
徙徒
143***2467@qq.com
徙徒
143***2467@qq.com
在 Python 中,方法分为三类实例方法、类方法、静态方法。三者区别看代码如下:
class Test(object): def InstanceFun(self): print("InstanceFun"); print(self); @classmethod def ClassFun(cls): print("ClassFun"); print(cls); @staticmethod def StaticFun(): print("StaticFun");t = Test(); t.InstanceFun(); # 输出InstanceFun,打印对象内存地址“<__main__.Test object at 0x0293DCF0>”Test.ClassFun(); # 输出ClassFun,打印类位置 <class '__main__.Test'>Test.StaticFun(); # 输出StaticFunt.StaticFun(); # 输出StaticFunt.ClassFun(); # 输出ClassFun,打印类位置 <class '__main__.Test'>Test.InstanceFun(); # 错误,TypeError: unbound method instanceFun() must be called with Test instance as first argumentTest.InstanceFun(t); # 输出InstanceFun,打印对象内存地址“<__main__.Test object at 0x0293DCF0>”t.ClassFun(Test); # 错误 classFun() takes exactly 1 argument (2 given)可以看到,在 Python 中,两种方法的主要区别在于参数。实例方法隐含的参数为类实例 self,而类方法隐含的参数为类本身 cls。
静态方法无隐含参数,主要为了类实例也可以直接调用静态方法。
所以逻辑上类方法应当只被类调用,实例方法实例调用,静态方法两者都能调用。主要区别在于参数传递上的区别,实例方法悄悄传递的是self引用作为参数,而类方法悄悄传递的是 cls 引用作为参数。
Python 实现了一定的灵活性使得类方法和静态方法,都能够被实例和类二者调用。
徙徒
143***2467@qq.com
兔子
8bi***gmail.com
类的二元方法运算符重载介绍的并不全面,文中介绍的全是正向方法,其实还有反向方法,就地方法。下面补充一些。
当解释器碰到 a+b 时,会做以下事情:
从 a 类中找 __add__ 若返回值不是 NotImplemented, 则调用 a.__add__(b)。
若 a 类中没有 __add__ 方法,则检查 b 有没有 __radd__ 。如果如果有,则调用 b.__radd__(a),若没有,则返回 NotImplemented。
接上条,若 b 也没有 __radd__ 方法,则抛出 TypeError,在错误消息中知名操作数类型不支持。
比如:向量类 <Myvector> 应当有向量与整数的乘法:
期望得到 b*a 也返回一个向量,b*a 应该等于 a*b。此时就需要在 Myvector 类中定义一个__rmul__方法。