python-公有和私有以及继承组合公有和私有以及继承组合
开始前我们先讲讲最基本的魔法方法开始前我们先讲讲最基本的魔法方法
(1)python的对象它自身有一些方法,他是面向对象的python的一切,它们能给类增加“魔力”的特殊方法,如果对象实现了
这些方法中的某一个,那么这个方法就会在特殊情况下被python调用,而这一切都是自动发生的而这一切都是自动发生的。
python的这些具有魔力的方法,总是被左右各两个下划线所包围。而这我们只说最基本的特殊方法:init()。(很奇怪这个没
显示全)
(2)它通常被称为构造方法构造方法,init()(这个也没显示全。。)方法的魔力体现在只要实例化一个对象,这个方法每次使用类创
建新对象时都会被自动调用。【还有一点就是实例化对象时,是可以传入参数的,这些参数会自动传入__init__()(这个是显
示完整了。。)方法中,可以将这个方法重写来自定义对象的初始化操作】
举个栗子:
>>>class People :
def __init__(self,name)
self.name = name
def kick(self):
print("我叫%s,谁踢我!":% self.name)
>>>p = People("小二")
>>>p.kick()
我叫小二,谁踢我!
共有和私有!共有和私有!
(1)进入正题~一般面向对象的编程语言都区分公有和私有的数据类型,像c++和java,都使用public和private关键字
由于声明数据是公有还是私有,但python并没有类似的关键字修饰。
难道python就是只能“赤裸裸”的?毫无隐私可言?其实不然,默认对象的方法和属性虽然都是公开的,并且可以通过点操作符
(.)进行访问:
>>>class People:
name = "小二"
>>>p = People
>>>p.name#就是这样访问哦~
小二
(2)python为了实现类似私有变量的特征,python内部采用了一种叫 Name Mangling(名字改编)的技术,在python中定
义私有变量只需要在变量名或者函数名前加上私有变量只需要在变量名或者函数名前加上“__”两个下划线两个下划线,那么这个函数或者变量就变成私有的了。
>>>class People:
__name = "小二" #这样就变成私有的啦~
#用点操作符也访问不了哦~
(3)上面的代码块就是在外部将变量名隐藏起来了,理论上如果要访问就要从内部进行,如下:
>>>class People:
def __init__(self,name):
self.__name = name
def getName(self):
return self.__name
>>>p = People("小二")
P.__name#这里会报错!!!
>>> p.getName()
'小二'#成功!
#强调一下!私有变量是不能直接通过:p.__name直接访问滴,而是必须在类内部通过方法返回私有变量的哦~
(4)那么双下划线开头的实例变量(私有变量)是不是一定不能从外部访问呢?当然不是。不能直接访问__name是因为
Python解释器对外把__name变量改成了_People__name这个样子
所以,我们仍然可以通过 使用_类名__变量名 来访问__name变量(注意这里的下划线)~
>>>p._People__name
'小二' #成功!
注意:注意: python目前的私有机制其实是伪私有,python的类是没有权限控制的,所有变量都是可以被外部调用的。最后这部分
有些读者(尤其没接触过面向对象编程的读者)可能看的有点懵,想不明白有什么用,下面的继承可能会对你有所启发!(好
尴尬,我看完后面我好像也没啥感觉~)
继承!继承!
(1)如果我们要在python里创建一个关于类的小游戏,我们首先要对鱼类进行细分,有金鱼(Goldfish),鲤鱼(Carp),
鲨鱼(Shark),and三文鱼(Salmo)。我们就开始对它们定义,欸!发现他们一个个定义十分麻烦,因为大部分鱼的属性
和方法都相似,可是,要怎么将它们相似的地方让它们自动传递呢?为了方便,快捷,继承继承就出现了!
类继承的语法也很简单:
评论0
最新资源