精华内容
下载资源
问答
  • python私有方法和私有属性

    万次阅读 多人点赞 2018-05-21 08:51:51
    Python默认的成员函数和成员变量都是公开的,Python 私有属性和方法没有类似别的语言的public,private等关键词来...声明该方法为私有方法,不能在类的外部调用 代码 class Test(object): #普通方法 def test(...

     

    Python默认的成员函数和成员变量都是公开的,Python 私有属性和方法没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只需要在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就会为私有的了

    声明该方法为私有方法,不能在类的外部调用

    代码

    class Test(object):
        #普通方法
        def test(self):
            print("普通方法test")
        #普通方法
        def _test1(self):
            print("普通方法_test1方法")
        #私有方法
        def __test2(self):
            print("私有方法__test2方法")
    
    t = Test()
    t.test()
    t._test1()
    #t.__test2()#调用的时候会报错

    执行效果

     

    外界无法访问私有方法,但可以在类内部方法私有方法。

    class Test(object):
        #私有方法
        def __test2(self):
            print("私有方法__test2方法")
        #普通方法
        def test(self):
            print("普通方法test")
        #普通方法
        def _test1(self):
            print("普通方法_test1方法")
            #可以在类内部调用私有方法
            t.__test2()#
            self.__test2()
    t = Test()
    t.test()
    t._test1()
    #t.__test2()和t.test2()#调用的时候会报错

      私有方法应用场景

     

    执行效果

    私有属性

    如果有一个对象,当需要对其进行修改属性时,有2种方法

    对象名.属性名 = 数据 ---->直接修改

    对象名.方法名() ---->间接修改

    为了更好的保存属性安全,即不能随意修改,一般的处理方式为

    将属性定义为私有属性

    添加一个可以调用的方法,供调用

    案例

    class Person(object):
        def __init__(self, name):
            self.__name = name
        def get_name(self):
            return self.__name
        def set_name(self, new_name):
            if len(new_name) >= 5:
                self.__name = new_name
            else:
                print("error:名字长度需要大于或者等于5")
    
    xiaoming = Person("skyter")
    print(xiaoming.get_name())
    #print(xiaoming.__name)#会报错

    class Person(object):
        def __init__(self, name):
            self.__name = name
    
        def get_name(self):
            return self.__name
    
        def set_name(self, new_name):
            if len(new_name) >= 5:
                self.__name = new_name
            else:
                print("error:名字长度需要大于或者等于5")
    
    
    p = Person("skyter")
    
    p.set_name("wanger")
    print(p.get_name())
    
    p.set_name("lisi")
    print(p.get_name())

    执行如图:

     总结

    Python中没有像C++中public和private这些关键字来区别公有属性和私有属性

    它是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。

     

    展开全文
  • 私有方法:顾名思义,只有自己才能使用的方法,在python中,定义私有方法一般用双下划线表示:‘__’ class Sent: #私有方法(双下划线定义的,比较重要,可以通过新建一个方法调用) def __sent_msg(self): ...

    私有方法:顾名思义,只有自己才能使用的方法,在python中,定义私有方法一般用双下划线表示:‘__’

    
    class Sent:
    
    #私有方法(双下划线定义的,比较重要,可以通过新建一个方法调用)
    
        def __sent_msg(self):
            print('-----------正在发送短信-----------')
    #公有方法
      
        def sent_msg(self,new_money):
            if new_money>1000:
                self.__sent_msg()
            else:
                print('余额不足,请先充值,再发送短信')
    sent = Sent()
    sent.sent_msg(100)
    #如上程序所示,私有方法不可以被直接调用
    #既然如此,私有方法在继承中又该扮演如何的角色呢?
    class A:
        def __init__(self):
            self.num1=100
            self.__num2=200
        def test1(self):
            print('========test1=======')
        def __test2(self):
            print('========test2=======')
    class B(A):
        pass
    #我们可以非常容易的调用继承于A的公有方法
    b=B()
    b.test1()
    

    在这里插入图片描述

    但如果我们试图调用__test2(私有方法)
    b.__test2
    在这里插入图片描述
    会发现程序报错
    所以不难得出结论:私有方法不会被继承
    而在我们定义的class A中的__init__中也有两个方法,
    self.num1=100
    self.__num2=200
    同理,当我们在程序中调用self.num1时,程序运行
    在这里插入图片描述
    当我们运行self.__num2时,程序报错
    在这里插入图片描述
    但是问题又双来了,当我们调用的是公有方法,但该公有方法却又调用了私有方法会怎样呢?
    在class A 原程序基础上再定义一个函数

            def test3(self):
        		msg3=self.__num2
     		    print(msg3)
     		    #公有方法test3内部含有A类私有方法__num2
     		  b=class B
     		  b.test3()
     运行结果:
    

    在这里插入图片描述
    所以,如果调用的是继承父类的公有方法,可以在这个公有方法中访问父类的私有方法和公有方法
    但是,如果在子类中实现了一个公有方法,则不可以调用继承父类的私有方法和私有属性

    展开全文
  • 17.python-私有属性和私有方法

    千次阅读 2019-11-27 21:24:02
    私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象的某些属性或方法可能只希望在对象的内部被使用,而不希望在外部被访问到 私有属性就是对象不希望公开的属性 私有方法就是对象不希望...

    私有属性和私有方法

    01. 应用场景及定义方式

    应用场景

    • 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到
    • 私有属性 就是 对象 不希望公开的 属性
    • 私有方法 就是 对象 不希望公开的 方法

    定义方式

    • 在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法

    class Women:
    
        def __init__(self, name):
    
            self.name = name
            # 不要问女生的年龄
            self.__age = 18
    
        def __secret(self):
            print("我的年龄是 %d" % self.__age)
    
    
    xiaofang = Women("小芳")
    # 私有属性,外部不能直接访问
    # print(xiaofang.__age)
    
    # 私有方法,外部不能直接调用
    # xiaofang.__secret()
    
    

    02. 伪私有属性和私有方法(科普)

    提示:在日常开发中,不要使用这种方式访问对象的 私有属性 或 私有方法

    Python 中,并没有 真正意义 的 私有

    • 在给 属性方法 命名时,实际是对 名称 做了一些特殊处理,使得外界无法访问到
    • 处理方式:在 名称 前面加上 _类名 => _类名__名称
    # 私有属性,外部不能直接访问到
    print(xiaofang._Women__age)
    
    # 私有方法,外部不能直接调用
    xiaofang._Women__secret()
    
    展开全文
  • PowerMockito Mock私有方法

    千次阅读 2019-11-26 09:58:24
    使用PowerMockito mock私有方法

    假设有类如下:

    public class MyClass {
    	public void publicMethod() {
    		......
    		String result = privateMethod();
    		......
    	}
    
        private String privateMethod() {
        	......
        }
    }
    

    对MyClass进行单元测试,测试publicMethod的时候可能需要对privateMethod进行mock,可以使用PowerMockito进行:

    @RunWith(PowerMockRunner.class)
    @PrepareForTest({MyClass.class})
    public class MyClassTest {
    	......
    	@Test
    	public void test() {
    		MyClass myClass = PowerMockito.spy(new MyClass());
            PowerMockito.doReturn("mockedResult").when(myClass, "privateMethod");
            ......
            myClass .publicMethod();
    		......
    	}
    }
    

    几个关键点:

    1. @RunWith(PowerMockRunner.class)
    2. @PrepareForTest({MyClass.class})
    3. MyClass myClass = PowerMockito.spy(new MyClass())
    4. PowerMockito.doReturn(“mockedResult”).when(myClass, “privateMethod”);
    展开全文
  • 私有属性和私有方法

    2019-05-20 22:37:31
    01. 应用场景及定义方式 ... 私有方法就是对象不希望公开的方法 定义方式 在定义属性或方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属性或方法  class Women: def __in...
  • 第一步,创建一个实体类,里面有私有属性和私有方法 package com.wbs.fanshe.domain; public class Person { private int age = 19; private String name ; public String getName(){ return name; ...
  • es6 Class 的私有方法

    千次阅读 2018-02-01 21:32:42
    Class 的私有方法 私有方法是常见需求,但 ES6 不提供,只能通过变通方法模拟实现。 一种做法是在命名上加以区别。 class Widget { // 公有方法 foo (baz) { this._bar(baz); } // 私有方法 _bar(baz) { ...
  • python中的私有属性和私有方法

    千次阅读 2019-07-27 17:13:25
    应用场景及定义方式 ... 私有方法就是队形不希望公开的方法 定义方式 在定义属性或方法时,在属性或者方法名前增加两个下划线,定义的就是私有属性或者方法 演示: class Women: def __init__(self,nam...
  • 父类的 私有属性 和 私有方法 子类对象 不能 在自己的方法内部,直接 访问 父类的 私有属性 或 私有方法 子类对象 可以通过 父类 的 公有方法 间接 访问到 私有属性 或 私有方法 私有属性、方法 是对象的隐私,不...
  • python私有属性及私有方法

    千次阅读 2019-02-05 20:55:10
    简介: 在其它高级编程语言,如Java、C++等...而在python中,也支持对私有属性及私有方法的控制。 设置私有属性及私有方法: class People: # 初始化参数 def __init__(self, name): self.name = name self...
  • Python类中的 私有变量和私有方法

    万次阅读 多人点赞 2016-10-20 17:41:41
    python类中的私有变量和私有方法 下划线 name mangling 技术
  • class定义私有属性和私有方法

    千次阅读 2018-12-28 15:11:14
    私有方法和私有属性,是只能在类的内部访问的方法和属性,外部不能访问。 但 ES6 不提供,只能通过变通方法模拟实现 下面是私有方法和私有属性暴露的例子 class Foo { //公有方法 foo (baz) { this._bar(baz);...
  • Junit 测试私有方法和私有变量方法

    千次阅读 2017-07-14 09:52:59
    //测试私有方法 Method method = targetClass.getDeclaredMethod(methodName, argClasses); method.setAccessible(true); return method.invoke(targetObject, argObjects); //测试私有变量 Field field = target...
  • JMockit Mock 私有方法和私有属性

    千次阅读 2020-03-23 09:27:41
    JMockit Mock 私有方法和私有属性 原文http://unmi.cc/jmockit-mock-private-methods-fields/ 前面说过 JMockit 因身处前线,所以简直无不可,本节例子演示 JMockit 怎么 Mock 私有方法和私有属性,示例虽然是静态...
  • Java私有方法

    千次阅读 2018-08-07 09:47:09
    在实现一个类时,由于共有数据非常危险,所以应该将所有数据设置为私有。然而,设计方式呢?有时希望将一个计算机代码分为若干个独立的辅助方法。通常,这些辅助方法不应该成为共有接口的一部分,...对于私有方法...
  • Python类中的私有属性和私有方法

    千次阅读 2019-06-05 14:49:08
    Python类中的私有属性和私有方法 Python是面向对象的语言,在Python里一切皆对象,所以大部分情况下,我们都是通过类的方式来编程。 但是Python中的属性和方法在类的外部默认是可以访问的,而有些属性和方法我们只...
  • Java反射——私有字段和私有方法

    千次阅读 2019-02-19 11:25:48
    Accessing Private Methods (访问私有方法) Accessing Private Fields  为了访问私有字段,你需要调用Class.getDeclaredField(String name)方法或者Class.getDeclaredFields()方法。Clas...
  • java 调用私有方法 我们是Java开发人员,在Java中已知4种访问修饰符:私有,受保护,公共和包。 好吧,除了私有以外,最后三个可以通过继承,相同的包或实例从类外部调用。 现在,常见的问题是,可以公开(从外部类...
  • 如何测试私有方法

    千次阅读 2020-03-23 00:54:51
    由于 Java 私有方法不允许在类的外部进行访问,当我们在写 junit 测试的时候,就无法像测试其他方法一样通过对象调用的方式对 private 方法进行单独测试。但我们可以通过以下两种方式进行测试 使用反射机制 Java ...
  • 1.子类无法直接访问父类的私有属性和私有方法 2.但父类可以访问自己内部的私有属性和私有方法 子类无法直接访问父类的私有属性和私有方法 class Person(object): def __init__(self,age): self.__age = age class...
  • iOS开发私有变量和私有方法

    千次阅读 2017-01-26 21:22:11
    oc中有私有变量,没有私有犯法,但是严格来说没有绝对的私有变量和私有方法私有变量: oc中提供了关键字@private来声明私有变量,只允许本类访问 私有方法: oc中没有提供关键字来声明私有方法,可以通过catogry的...
  • ES6 Class 定义私有属性或私有方法

    千次阅读 2018-03-31 14:47:11
    私有方法是常见需求,但 ES6 不提供,只能通过变通方法模拟实现。 一种做法是在命名上加以区别,比如使用下划线表示私有方法。但是,这种命名是不保险的,在类的外部,还是可以调用到这个方法。 class Widget { ...
  • 从Java 9开始,接口当中允许定义私有方法。 普通私有方法,解决多个默认方法之间重复代码问题 格式: private 返回值类型 方法名称(参数列表) { 方法体 } 静态私有方法,解决多个静态方法之间重复代码问题 格式...
  • Python类声明私有变量和私有方法

    千次阅读 2018-11-10 11:47:53
    Python类声明私有变量和私有方法 类的私有变量和私有方法 在Python中可以通过在属性变量名前加上双下划线定义属性为private;添加_变成protected. 语法规则:特殊变量命名 _xx 以单下划线开头的表示的是protected...
  • 该文章转载于 Python 类的私有变量和私有方法 #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @File : class3.py """ 类的私有变量和私有方法 在Python中可以...
  • Java继承--父类私有属性和私有方法的继承

    千次阅读 多人点赞 2019-08-12 14:33:17
    Java继承 java中继承是一个重要的特性,使用...但是在我周围的一些小伙伴和一些网上科普,却因为子类的实例化对象无法直接调用父类的私有属性和私有方法,认为子类只能继承父类的非私有属性和非私有方法。所以我们...
  • PowerMock使用@spy进行模拟私有方法返回值进行测试时,私有方法中的代码总是会被执行 (如果私有方法中依赖环境等因素,测试则难以进行) 例如如下代码段,需要测试callSumXX方法,同时想要模拟私有方法sumXX的...
  • 接口中私有方法

    千次阅读 2019-06-11 08:31:17
    私有方法: 当我们在一个接口里写多个默认方法或者静态方法的时候,可能会遇到 程序重复的问题。我们可以把这些重复的程序提取出来,创建一个新的方法, 用private进行修饰,这样就创造了一个只有接口可以调用...
  • //类的私有方法与公有方法 function Foo(name) { function private() { console.log('私有方法') } private() this.name = name this.getName = function () { console.log('公有方法',this.name) ...
  • Java9 接口支持私有方法

    千次阅读 2017-09-22 22:00:38
    1、接口支持私有方法 Java9 不仅像Java8一样支持接口默认方法,同时还支持私有方法,这样看来抽象类越来越没有用武之地了………………//java9 新特性之接口支持私有方法 public interface StudentService { ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 642,543
精华内容 257,017
关键字:

私有方法