收藏此站 联系我们 网站
当前位置:首页» 技术日志 » 【建站服务】广元淘宝装修/广元京东店铺设计/广元拼多多网店装修公司/广元企业网店开通申请-网店装修设计-域名申请

【建站服务】广元淘宝装修/广元京东店铺设计/广元拼多多网店装修公司/广元企业网店开通申请-网店装修设计-域名申请

作者: 风兰 . 阅读量: 3 . 发表时间:2022-09-21 05:36:57

网站建设

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


广元淘宝装修/广元京东店铺设计/广元拼多多网店装修公司/广元企业网店开通申请-网店装修设计


网站建设.png

  1. 有专有方法中,__init__()要求无返回值,或者返回 None。而其他方法,如__str__()、__add__()等,一般都是要返回值的,如下所示:

    >>> class Complex:...     def __init__(self, realpart, imagpart):...         self.r = realpart...         self.i = imagpart...         return 'hello'...>>> x = Complex(3.0, -4.5)Traceback (most recent call last):
      File "<stdin>", line 1, in <module>TypeError: __init__() should return None, not 'str'

    而对于 __str__()、__add__() 等。

    def __str__(self):
            return 'Vector (%d, %d)' % (self.a, self.b)def __repr__(self):
        return 'Vector (%d, %d)' % (self.a, self.b)def __add__(self,other):
        if other.__class__ is Vector:
            return Vector(self.a + other.a, self.b + other.b)
        elif other.__class__ is int:
            return Vector(self.a+other,self.b)
    徙徒

       徙徒

      143***2467@qq.com

    3年前 (2019-06-20)
  2.    徙徒

      143***2467@qq.com

    28

    类的专有方法中,也是存在默认优先级的,多个方法都有返回值,但一般优先取 __str__() 的返回值,如下面例子:

    类的专有方法中,也是存在默认优先级的,多个方法都有返回值,但一般优先取 __str__() 的返回值,如下面例子:
    class Vector:
        def __init__(self, a, b):
            self.a = a        self.b = b    def __repr__(self):
            return 'Vector (%d, %d)' % (self.b, self.a)
        def __str__(self):
            return 'Vector (%d, %d)' % (self.a, self.b)
        def __add__(self,other):
            return Vector(self.a + other.a, self.b + other.b)v1 = Vector(2,10)print (v1)

    结果是 Vector(2,10),而不是 Vector(10,2)。这里优先使用 __str__() 的返回值。

    v1.__repr__()

    结果是:Vector(10,2)

    徙徒

       徙徒

      143***2467@qq.com

    3年前 (2019-06-20)
  3.    徙徒

      143***2467@qq.com

    129

    笔记中有位同学如下这样写道,但我认为不准确:

    最新的 Python3.7 中(2018.07.13),对类的构造函数进行了精简。

    3.7 版本:

    from dataclasses import dataclass@dataclassclass A:
      x:int
      y:int
      def add(self):
        return self.x + self.y

    相当于以前的:

    class B:
      def __init__(self,x,y):
        self.x = x    self.y = y  def add(self):
        return self.x + self.y

    实际上,对于类 A, 实例化时不需要参数;而对于类 B,实例化时需要输入 (x, y) 参数,这才是两者的核心区别。定义类时,若需要输入参数,则一般必须使用 __init__()方法;若不需要输入参数,是否使用 __init__() 方法都可以。

    和版本是否对类的构造函数进行了精简,关系不大。

    徙徒

       徙徒

      143***2467@qq.com

    3年前 (2019-06-20)
  4.    徙徒

      143***2467@qq.com

    31

    在 Python 中,方法分为三类实例方法、类方法、静态方法。三者区别看代码如下:

    class Test(object):
        def InstanceFun(self):
            print("InstanceFun");
            print(self);


际上,对于类 A, 实例化时不需要参数;而对于类 B,实例化时需要输入 (x, y) 参数,这才是两者的核心区别。定义类时,若需要输入参数,则一般必须使用 __init__()方法;若不需要输入参数,是否使用 __init__() 方法都可以。


和版本是否对类的构造函数进行了精简,关系不大。


徙徒

   徙徒


  143***2467@qq.com


3年前 (2019-06-20)

   徙徒


  143***2467@qq.com


31

在 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();    # 输出StaticFun

t.StaticFun();       # 输出StaticFun

t.ClassFun();        # 输出ClassFun,打印类位置 <class '__main__.Test'>

Test.InstanceFun();     # 错误,TypeError: unbound method instanceFun() must be called with Test instance as first argument

Test.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


3年前 (2019-06-20)

   兔子


  8bi***gmail.com


26

类的二元方法运算符重载介绍的并不全面,文中介绍的全是正向方法,其实还有反向方法,就地方法。下面补充一些。


当解释器碰到 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 


广元淘宝装修/广元京东店铺设计/广元拼多多网店装修公司/广元企业网店开通申请-网店装修设计



上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务