Python之类的重写和私有变量
1.类的重写
#!/usr/bin/env python
# -*- coding:utf8 -*-
# @Time : 2017/11/7 10:19
# @Author : hantong
# @File : class4.py
#类的重写
class parent:
name = 'parent'
sex = 'M'
age = 31
class child(parent):
#如果多个父类,则添加多个即可,但是子类会默认从左至右查找
age = '30'
#在子类中重新定义了age这个参数,这就叫做类的重新
def __init__(self):
print('My name is {0}'.format(self.name))
print('My sex is {0}'.format(self.sex))
#此处name和sex参数子类中没有定义,但是父类中定义了,子类可以继承过来
def hello(self):
print('hello world')
def get_name(self):
return(self.name)
def get_sex(self):
return(self.sex)
# print(self.sex)
def get_age(self):
return(self.age)
a = child()
a.hello()
print(a.get_name())
print(a.get_sex())
print(a.get_age())
#当父类和子类中都定义了一个参数时,输出为子类为准,所以最终打印的结果是30而不是31,如果子类中没定义会去父类中查找
#子类还可以更改父类中定义的参数,如上例中:age,这叫类的重写,如果不重写,则会打印父类中定义的age
2.类的私有变量
#!/usr/bin/env python
# -*- coding:utf8 -*-
# @Time : 2017/11/7 14:17
# @Author : hantong
# @Filae : class5.py
#类的私有变量和私有方法
# 特殊变量命名
# 1、 _xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。
# 2、 __xx 双下划线的表示的是私有类型的变量,只能允许这个类本身访问.
# 3、 __xx__定义的是特例方法。用户控制的命名空间内的变量或是属性,如init , __import__或是file 。
class A(object):
_name = 'parent'
__sex = 'M'
def hello(self):
print(self._name)
print(self.__sex)
def get_sex(self):
return self.__sex
#再创建一个类即可打印出__sex
a = A()
print(a._name)
# print(a.__sex)
#这里如果直接打印实例化后的结果,会报错说‘AttributeError: 'A' object has no attribute '__sex'’
a.hello()
print(a.get_sex())
#可以打印出来__sex的结果
执行结果如下:
parent
parent
M
M