高级特性-面向对象部分
来源:互联网 发布:如何评价汤灿 知乎 编辑:程序博客网 时间:2024/05/16 07:25
1. 类的定义使用
#!/bin/python
class
Employee:
def
__init__(
self
,name):
self
.name
=
name
def
display(
self
):
print
(
self
.name)
employee1
=
Employee(
"kerry"
)
employee1.display()
注意点:
构造函数式两个下划线,两边都是,否则报错,注意!!!
构造函数如果把参数self去掉,报错,默认函数调用python会增加self引用作为参数,如下测试
[nxuser@PSjamsBond-0-0-0 ~]$ python testclass.py
#!/bin/python
class
Employee:
def
__init__(name):
self
.name
=
name
def
display(
self
):
print
(
self
.name)
employee1
=
Employee(
"kerry"
)
employee1.display()
Traceback (most recent call last):
File
"testclass.py"
, line
12
,
in
<module>
employee1
=
Employee(
"kerry"
)
TypeError: __init__() takes exactly
1
argument (
2
given)
2. 类的继承
需要注意的地方:继承语法 class 派生类名(基类名)://... 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。
在python中继承中的一些特点:
1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作"多重继承"
#!/bin/python
class
Employee:
name
=
""
def
__init__(
self
,name):
self
.name
=
name
def
display(
self
):
print
(
self
.name)
class
Child(Employee):
def
__init__(
self
,name):
print
(
"child constructor"
)
self
.name
=
name
def
display2(
self
):
print
(
"subclass display2"
)
employee1
=
Employee(
"kerry"
)
employee1.display()
child
=
Child(
"eva"
)
child.display2()
child.display()
输出如下:
kerry
child constructor
subclass display2
eva
3. 隐藏数据
在python中实现数据隐藏很简单,不需要在前面加什么关键字,只要把类变量名或成员函数前面加两个下划线即可实现数据隐藏的功能,这样,对于类的实例来说,其变量名和成员函数是不能使用的,对于其类的继承类来说,也是隐藏的,这样,其继承类可以定义其一模一样的变量名或成员函数名,而不会引起命名冲突
[nxuser@PSjamsBond
-
0
-
0
-
0
~]$ vi testhidendata.py
#!/bin/python
class
testhidden:
__name
=
""
test
=
testhidden()
print
(test.__name)
[nxuser@PSjamsBond-0-0-0 ~]$ python testhidendata.py
Traceback (most recent call last):
File "testhidendata.py", line 8, in <module>
print(test.__name)
AttributeError: testhidden instance has no attribute '__name'
修改后,可以访问:
#!/bin/python
class
testhidden:
name
=
"aa"
test
=
testhidden()
print
(test.name)
[nxuser@PSjamsBond-0-0-0 ~]$ python testhidendata.py
aa
关于隐藏数据,不隐藏子类同样可以定义相同名称的变量,不知道这个用处??如下测试:
#!/bin/python
class
Testhidden:
name
=
"aa"
class
Sub(Testhidden):
name
=
"bb"
test
=
Testhidden()
print
(test.name)
sub
=
Sub()
print
(sub.name)
[nxuser@PSjamsBond-0-0-0 ~]$ python testhidendata.py
aa
bb
如果实例对象要访问隐藏属性,需要利用:
instance._classname__name
第一个是一个下划线,第二个是两个下划线
#!/bin/python
class
Testhidden:
__name
=
"aa"
class
Sub(Testhidden):
name
=
"bb"
test
=
Testhidden()
print
(test._Testhidden__name)
sub
=
Sub()
print
(sub.name)
- 高级特性-面向对象部分
- 面向对象高级特性
- 【面向对象】高级类特性
- 面向对象的高级特性
- python 面向对象高级特性
- PHP面向对象高级特性
- JAVA_面向对象高级特性
- 08面向对象高级特性一
- 09面向对象高级特性二
- 10面向对象高级特性三
- 【javascript】javascript之面向对象高级特性
- java面向对象高级特性:泛型
- 面向对象高级特性1:抽象类
- 【Java SE】面向对象高级特性
- java基础_面向对象高级特性
- JavaSE 10 面向对象的高级特性
- 04--面向对象高级部分随记(上)
- 深入学习javascript面向对象及高级特性
- IE UserData 本地存储(替代localStorage)
- android -- 小功能 怎样用AIDL Service 传递复杂数据
- Spark上实现Kmeans
- 查询Oracle正在执行的sql语句
- 清除bios设置/power-on password/CMOS(再发无法进入系统的情况下依然适用)
- 高级特性-面向对象部分
- 关于嵌入式的学习和职业发展(转载)
- Android 混淆代码总结
- 更改android开发虚拟机设备avd路径
- 集软件授权、课件保护和身份认证于一身的加密狗
- sql语句判断字符串中是否包含另一个字符
- 圆角、描边背景样式,XML文件
- POJ 1659 Frogs' Neighborhood 可图性判断-Havel定理
- 函数定义与使用