• 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. 将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__'表示的方法,都具有特殊的意义。
  • 相关阅读:
    第十篇 .NET高级技术之委托
    第九篇 .NET高级技术ref、out
    文华财经函数大全
    为字段创建全文检索索引
    C#.NET中代码注释提示
    WPF中的资源引用心得
    XAML文件动态加载
    spring MVC找不到JS的问题
    Oracle性能监控脚本
    ExtJs之Ext.data.Store
  • 原文地址:https://www.cnblogs.com/foe0/p/11506466.html
Copyright © 2020-2023  润新知