zoukankan      html  css  js  c++  java
  • python 面向对象

    参考 https://www.runoob.com/python3/python3-class.html

    class

    类有一个名为 init() 的特殊方法(构造方法),该方法在类实例化时会自动调用,像下面这样: #双下划线

    class Complex:
        def __init__(self, realpart, imagpart):
            self.r = realpart
            self.i = imagpart
    x = Complex(3.0, -4.5)
    print(x.r, x.i)   # 输出结果:3.0 -4.5
    

    类属性与方法

    类的私有属性:

    __private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。
    在类内部的方法中使用时 self.__private_attrs。

    类的方法
    在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。

    self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self。

    类的私有方法 :

    __private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。
    在类的内部调用 self.__private_methods

    类的私有属性实例如下:

    
    实例(Python 3.0+)
    #!/usr/bin/python3
     
    class JustCounter:
        __secretCount = 0  # 私有变量
        publicCount = 0    # 公开变量
     
        def count(self):
            self.__secretCount += 1
            self.publicCount += 1
            print (self.__secretCount)
     
    counter = JustCounter()
    counter.count()
    counter.count()
    print (counter.publicCount)
    print (counter.__secretCount)  # 报错,实例不能访问私有变量
    执行以上程序输出结果为:
    
    1
    2
    2
    Traceback (most recent call last):
      File "test.py", line 16, in <module>
        print (counter.__secretCount)  # 报错,实例不能访问私有变量
    AttributeError: 'JustCounter' object has no attribute '__secretCount'
    
    

    类的私有方法实例如下:

    实例(Python 3.0+)
    #!/usr/bin/python3
     
    class Site:
        def __init__(self, name, url):
            self.name = name       # public
            self.__url = url   # private
     
        def who(self):
            print('name  : ', self.name)
            print('url : ', self.__url)
     
        def __foo(self):          # 私有方法
            print('这是私有方法')
     
        def foo(self):            # 公共方法
            print('这是公共方法')
            self.__foo()
     
    x = Site('菜鸟教程', 'www.runoob.com')
    x.who()        # 正常输出
    x.foo()        # 正常输出
    x.__foo()      # 报错
    

    avatar

    类的专有方法:

    init : 构造函数,在生成对象时调用
    del : 析构函数,释放对象时使用
    repr : 打印,转换
    setitem : 按照索引赋值
    getitem: 按照索引获取值
    len: 获得长度
    cmp: 比较运算
    call: 函数调用
    add: 加运算
    sub: 减运算
    mul: 乘运算
    truediv: 除运算
    mod: 求余运算
    pow: 乘方

    运算符重载

    Python同样支持运算符重载,我们可以对类的专有方法进行重载,实例如下:

     
    class Vector:
       def __init__(self, a, b):
          self.a = a
          self.b = b
     
       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)
    v2 = Vector(5,-2)
    print (v1 + v2)
    以上代码执行结果如下所示:
    
    Vector(7,8)
    
  • 相关阅读:
    FSBQPIDMI总线的区别
    为什么PCI-e比SATA快这么多?
    chage命令管理用户口令时效
    账户管理groupadd groupmod groupdel usermod usermod userdel
    linux 里 /etc/passwd 、/etc/shadow和/etc/group 文件内容解释
    RPM常见用法
    智力逻辑题
    Android ROM 制作教程
    智能家居项目(2):项目project框架的搭建
    5999卖999!是噱头还是颠覆
  • 原文地址:https://www.cnblogs.com/lqerio/p/11155936.html
Copyright © 2011-2022 走看看