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

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

 

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

  

 

posted @ 2017-09-24 12:40  西湖歌舞几时休  阅读(214)  评论(0编辑  收藏  举报