私有属性,私有方法,类变量,实例变量,单下划线,双下划线

1、私有属性__age,不能通过实例对象直接调用,而是通过一个方法来调用
    class Dog:
      def __init__(self, new_age):
        self.__age = new_age

      def get_age(self):
        return self.__age

    wang_cai = Dog(1)

    result = wang_cai.get_age()
    print(result)

2、私有方法,通过一个共有方法来调用

  class Dog(object):
     def __init__(self,new_age):
       self.__age = new_age

    #在对象被删除的时候调用
     def __del__(self):
          print(‘over‘)

      #定义一个私有方法
      def __sit_down(self):
        print(‘zuoxiale‘)
      #dingyi 一个共有方法,再调用私有方法
      def sit_down(self,host):
        if host == ‘suqin‘:
         self.__sit_down()

 wangcai.sit_down(‘suqin‘)
私有方法,私有属性不被子类继承

3、
  class Person:
    name="aaa"
  p1=Person()
  p2=Person()
  p1.name="bbb"
  print p1.name      # bbb
  print p2.name     # aaa
  print Person.name   # aaa

  类变量就是供类使用的变量,实例变量就是供实例使用的.

  这里p1.name="bbb"是实例调用了类变量,这其实和上面第一个问题一样,就是函数传参的问题,p1.name一开始是指向的类变量name="aaa",

  但是在实例的作用域里把类变量的引用改变了,就变成了一个实例变量,self.name不再引用Person的类变量name了

  class Person:
    name=[]
  p1=Person()
  p2=Person()
  p1.name.append(1)
  print p1.name      # [1]
  print p2.name      # [1]
  print Person.name    # [1

7、python中的 单下划线 双下划线问题,私有化

  _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入。类对象和子类可以访问,

            _名的变量、函数、类在使用from xxx import *时都不会被导入

  __xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)

  __xx__:双前后下划线,用户名字空间的魔法对象或属性。例如:__init__ , __ 不要自己发明这样的名字

  父类中属性名为__名字的,子类不继承,子类不能访问

        其实能访问的 ,只是名字此变量重整而已,变成了_class__name

  如果在子类中向__名字赋值,那么会在子类中定义的一个与父类相同名字的属性

  

时间: 2024-10-06 06:33:52

私有属性,私有方法,类变量,实例变量,单下划线,双下划线的相关文章

JavaScript基础对象创建模式之私有属性和方法(024)

JavaScript没有特殊的语法来表示对象的私有属性和方法,默认的情况下,所有的属性和方法都是公有的.如下面用字面声明的对象: var myobj = { myprop: 1, getProp: function () { return this.myprop; } }; console.log(myobj.myprop); // `myprop` is publicly accessible console.log(myobj.getProp()); // getProp() is publ

Java中子类继承了父类的私有属性及方法吗?

最近学习继承,从书中看到子类继承父类,子类拥有父类所有的属性和方法,于是使用程序去验证,发现父类的私有属性和私有方法,子类是不能访问的,当然一些父类的私有属性可能可以通过相应的方法访问到,但是私有的方法似乎不能简单的访问,这里暂不考虑Java反射机制,于是我分析,子类不能继承父类私有的属性及方法,但是分析了内存后,我发现我是错的,在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象.所以所谓的继承使子类拥有父类所有的属性和方法

Java内存理解 && 反射访问私有属性或方法

理解了内存,就理解了一切,就理解了各种各样的语言.所有的语言无非都是这样:局部变量分配内存永远在栈里面,new出来的东西分配内存永远是在堆里,静态的东西分配内存永远是在数据区.剩下的代码肯定是在代码区.所有的语言都是这样. 对于在API文档里面找某个类,如果一个类不用引入包就可以直接使用,那么这个类肯定是在java.lang这个包里. 接口是抽象方法(public)和常量值(public static final)的集合. 抽象类一定要有abstract关键字. Java反射之访问私有属性或方法

Python私有属性@property方法

# 把得到的属性值的方法上@property# 在设置属性值的方法上@属性名.setter# 两个方法的名字一致,都是属性名#先写@property再写@属性名.setterclass Person(object): def __init__(self,name,age):#在定义对象属性的时候,私有属性不加__ self.name = name self.age = age @property#相当于getName()方法 def name(self): return self.__name#

【OC学习-9】利用@property属性和@synthesize简化实例变量的存取器方法

如果我们在一个类中定义了3个实例变量,那么如果要写存取器方法的话,需要写6个(每个实例变量各一个setter和getter).现在的简化方法是: (1)在类的.h文件里,只要写了属性,那么这个实例变量就可以被操作,如果想要不被操作保证安全,那么就不要声明属性,只要写在实例变量里即可. #import <Foundation/Foundation.h> //我们一般会省略实例变量的写法,因为写了属性后,一般会自动生成同名的实例变量 @interface ASStudent : NSObject{

私有属性和方法

# 私有属性:属性名前面有两个下划线,那么这样的属性称为私有属性# 私有方法:方法名前面有两个下划线,那么这样的方法称为私有方法 # 私有属性和私有方法的特点:# 私有属性和私有方法只能在当前类中使用,不能类外或者其他类(子类)里面使用 class Person(object): def __init__(self,name,age): self.name = name self.__age = age def show(self): print(self.name,self.__age) de

python 单下划线/双下划线使用总结(转载)

python 单下划线/双下划线使用总结 时间:2013-10-08 10:56来源:www.chengxuyuans.com Python 用下划线作为变量前缀和后缀指定特殊变量/方法. 主要存在四种情形1.    1. object # public    2. __object__ # special, python system use, user should not define like it    3. __object # private (name mangling duri

javascript使用闭包模拟私有属性和方法

最近因为做了一个项目,其中涉及到了js的静态方法和私有方法,这个概念在其语言里面是很常见的,很多语言都有static这个关键字,只要在一个类的前面加上static就表示申明了一个静态类,但是javascript在面向对象的方面没有那么多的特征,他没有专门的static关键字,也没有其他语言的private这样的访问修饰符.要做到这一点就必须使用js自己的一些特性来变相的完成. 首先javascript里面有一个高级特性叫闭包,简单的说js的闭包可以理解成是一种现象或者特性,一般出现在两个函数嵌套

javaScript中私有属性和方法

javaScript并没有特殊的语法来表示私有.保护.或公共属性和方法,在这一点上与 java或其他语言是不同的,JavaScript中所有对象的成员是公用的: var myobj={ mypop:1, getProp:function(){ return this.myprop; } }; console.log(myobj.myprop); // 'myprop'是公有可访问的 console.log(myobj.getProp()); //getProp()也是公有的,可访问的 当使用构造

对象的行为——方法操作实例变量

对象有:[状态] 和 [行为] 两种属性:分别由[实例变量]和[方法]类表示. 类所描述的是[对象知道什么]:对象所知者 就是实例变量 [对象执行什么]:对象所为者 就是方法 类的每个实例(也就是特定类型 的 每个对象 ),可以维持自己的实例变量. 状态影响行为<===>行为影响状态: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 调用参数的时候 实参的传递:形参的接收: //Java是通过值传递的,也就是通过拷贝传递(不论传递的是对象还是主数据类型的变量), //方