zoukankan      html  css  js  c++  java
  • python,类和对象(二),self 、__init__(self,param[,param...])、__private(私有变量)

      当我们在类中定义方法的时候,总会看到会第一个参数总是self,是的这个是python的一个语法,他相当于这个对象的指针。

    class Dog():
        def setName(self,name):
            self.name = name
        def callName(self):
            print("hello",self.name)
    #-----------------输出
     
    >>> d = Dog()
    >>> t = Dog()
    >>> d.setName("didi")
    >>> t.setName("tonny")
    >>> d.callName()
    hello didi
    >>> t.callName()
    hello tonny
    >>> 

      构造函数__init__(self,param[,param...]),当我们在初始化的时候需要给类内部某些变量进行赋值的时候可以用到

    class Cat():
        name="tom"
        def __init__(self,name):
            print("未给定初始值的名字:",self.name)
            self.name = name
            print("名字:",self.name)
    #当我们不给予初始值的时候会报错
    >>> c = Cat()
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        c = Cat()
    TypeError: __init__() missing 1 required positional argument: 'name'
    #当我们给予初始值的时候。
    >>> c = Cat("jerry")
    未给定初始值的名字: tom #由于默认是tom,所以第一次输出时就是tom
    名字: jerry
    >>> 

      __private(私有变量),在Python中一般我们声明的都是公共属性,但是有时候要设置一个属性或者方法为私有方法的时候那么可以通过在属性名称前加两个_来进行声明,这样这个私有属性在外部就访问不到了。如:

    class Cat():
        name="tom" #共有属性
        __no = "001" #私有属性
        def __init__(self,name):
            print("未给定初始值的名字:",self.name)
            self.name = name
            print("名字:",self.name)
            print("编号:",self.__no)
    #初始化对象
    >>> c =Cat("jerry")
    未给定初始值的名字: tom
    名字: jerry
    编号: 001
    
    #当我们试图调用私有属性的时候会报错
    >>> c.__no
    Traceback (most recent call last):
      File "<pyshell#1>", line 1, in <module>
        c.__no
    AttributeError: 'Cat' object has no attribute '__no'
    
    #当我们调用共有属性的时候直接就成功了
    >>> c.name
    'jerry'
    >>> 

      但是需要注意的是,在python中私有其实也只能说是“伪私有”,因为我们还是可以通过另一种方式进行访问,也许您已经猜到了:

    #通过_Cat__no就可以访问到这个私有方法
    >>> c._Cat__no
    '001'
    >>> 
  • 相关阅读:
    juc原子类之五:AtomicLongFieldUpdater原子类
    DICOM:C-GET与C-MOVE对照剖析
    android createbitmap函数内存溢出,求解怎样进行处理out of memory溢出问题
    TRIZ系列-创新原理-32-改变颜色原理
    FP-Growth算法之频繁项集的挖掘(python)
    个人年终总结
    J2EE之ANT
    log4net 使用与配置 每天一份log文件
    Android 完美实现图片圆角和圆形(对实现进行分析)
    Unity3d修炼之路:载入一个预制体,然后为该对象加入组件,然后查找对象,得到组件。
  • 原文地址:https://www.cnblogs.com/pengpengzhang/p/8698009.html
Copyright © 2011-2022 走看看