Python 类学习的一些Tips

Posted foe0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 类学习的一些Tips相关的知识,希望对你有一定的参考价值。

这里不详细介绍类,只总结一些小萌新在学习python 类时会有的一些疑点。

 

  • 类的私有性

 

    1. 在python中,属性和方法的访问权限只有两种,公开的,和私有的。在给属性命名时用两个“__”下划线作为开头,就设置其为私有的了。
    2. class Test:
      
          def __init__(self, foo):
              self.__foo = foo
      
          def __bar(self):
              print(self.__foo)
              print(__bar)
      
      
      def main():
          test = Test(hello)
          # AttributeError: Test object has no attribute __bar
          test.__bar()
          # AttributeError: Test object has no attribute __foo
          print(test.__foo)
      
      
      if __name__ == "__main__":
          main()

       可以看到,以上调用方法都会因为没有权限给返回错误

          # AttributeError: ‘Test‘ object has no attribute ‘__bar‘

       如果想要调用私有的属性,使用如下方式:

      def main():
          test = Test(hello)
          test._Test__bar()
          print(test._Test__foo)
    3.   在实际开发中,不建议设置私有属性,会导致子类无法访问,python这一点与java和C#不同,他们类中的属性(数据抽象)通常都是私有的,目的是保护数据;而其类中的方法(行为抽象)都是公开的。而python不从语法层面保护私有成员的私密性。其实这个设定是无意义的,因为只要知道调用私有属性的方法,仍然可以进行调用。
    4. python 里有一句这样的话,We are all consenting adults here.我们都是成年人。这种设定只是给使用者一个暗示,这是一个不应该直接访问的属性和方法。
    5. __bar 是私有的,__bar__不是私有的。
    6. 参考链接:https://blog.csdn.net/jackfrued/article/details/79521404

 

 

  • self是个什么东西嗯?

    1. 首先,python 要求在类方法中,至少要包含一个参数,但没有规定此参数名,故此将类方法的第一个参数名为self,这是一个约定俗成的习惯。
    2. self 参数可以理解为C++ 语言中的this指针。详细举例:我们可以针对一个类,创建多个对象,每个对象都有多个方法。当某一对象调用类方法时,该对象会把自己的引用(self 指针)作为第一个参数传给被调用方法,这样,就让python 解释器明白,这个时候操作的方法是哪个对象的。
    3. 执行以下这段代码
      class Dog:
          def __init__(self):
              print(self,"在调用构造方法")
          # 定义一个jump()方法
          def jump(self):
              print(self,"正在执行jump方法")
          # 定义一个run()方法,run()方法需要借助jump()方法
          def run(self):
              print(self,"正在执行run方法")
              # 使用self参数引用调用run()方法的对象
              self.jump()
      dog1 = Dog()
      dog1.run()
      dog2 = Dog()
      dog2.run()
    4. 查看self指针状态,可以看到两个对象的指针入口是不一样的。
    5. 技术图片
    6. 将self作为返回值有什么效果?将self参数作为返回值,可以多次连续调用同一个方法,使代码更简洁。这里有一个理解例子
      class ReturnSelf :
          def grow(self):
              if hasattr(self, age):
                  print(hasattr(self,age))
                  self.age += 1
              else:
                  self.age = 1
              # return self返回调用该方法的对象
              print(self.age)
              return self
      rs = ReturnSelf()
      # 可以连续调用同一个方法
      rs.grow().grow().grow()
      print("rs的age属性值是:", rs.age)

        返回值为

技术图片

 

         参考链接:http://c.biancheng.net/view/2266.html

 

 

  • def __init__():方法的含义

  1. __init__(),是一个特殊的类实例方法,也被称为构造方法,构造函数。
  2. 它在创建对象时,每次都会被python解释器自动调用。在python中,这种以  ‘__xx__‘表示的方法,都具有特殊的意义。

以上是关于Python 类学习的一些Tips的主要内容,如果未能解决你的问题,请参考以下文章

Python 学习笔记 -- 一些常用的BIF

python学习第七周之静态方法类方法属性方法和一些类的成员方法

python编程学习进度四

Python学习笔记

python编程学习进度十

Python学习—常用时间类与命名元组