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'
>>> 
原文地址:https://www.cnblogs.com/pengpengzhang/p/8698009.html