
前几章包括开启python之旅、列表和元组、字符串、字典、条件和循环等语句、函数等基本操作。主要对后面几章比较深入的内容记录笔记。
第8章 面向对象编程
8.3深入类
#!/usr/local/bin/python3
# -*- coding:utf-8 -*-
class MyClass(object):
i=123
def f(self):
return 'hello world' useClass=MyClass()
print('类属性:',useClass.i)
print('类方法:',useClass.f()) #打印系统默认的编码
import sys
print(sys.getdefaultencoding())
输入,必须用python3,如果用python的话,会打印出编码而不是中文:
python3 class_test.py
程序执行结果如下:
类属性: 123
类方法: hello world
utf-8
类中定义方法:第一个参数必须是self,其他和普通函数一样。
类中调用方法:实例变量上直接调用,除了self不用传递,其他参数正常传入。
类对象支持两种操作:属性引用(obj.name,obj代表类对象,name代表属性)、实例化。
类的构造方法
若类不显式地定义一个__init__()方法,则程序默认调用一个无参的__init__()方法。一个类中可定义多个构造方法,但是后面的构造方法会覆盖前面的构造方法,只能根据最后一个构造方法的形式进行实例化。建议一个类中只定义一个构造函数。:
#!/usr/local/bin/python3
# -*- coding:utf-8 -*-
class MyClass(object):
i=123
def __init__(self.name):
self.name = name
def f(self):
return 'hello '+self.name useClass=MyClass('angela')
print('类属性:',useClass.i)
print('类方法:',useClass.f())
输出:
类属性: 123
类方法: hello angela
类的访问权限
#!/usr/local/bin/python3
# -*- coding:utf-8 -*-
class Student(object):
def __init__(self,name):
self.name = name
def info(self):
print('hello '+self.name) stu=Student('angela')
print('修改前的姓名:',stu.name)
stu.info()
#可以在类外部修改类的内部属性
stu.name = 'andrew'
print('修改后的姓名:',stu.name)
stu.info()
输出:
修改前的姓名: angela
hello angela
修改后的姓名: andrew
hello andrew
如上,可以在类外部修改类的内部属性。要让内部属性不让外部访问,属性名称前加两个下划线,self.__name。
如何访问类的私有变量:
#!/usr/local/bin/python3
# -*- coding:utf-8 -*-
class Student(object):
def __init__(self,name):
self.__name = name
def info(self):
print('hello '+self.__name)
def getName(self):
return self.__name
def setName(self,name):
self.__name = name stu=Student('angela')
print('修改前的姓名:',stu.getName())
stu.info() stu.setName('andrew')
print('修改后的姓名:',stu.getName())
stu.info()
输出:
修改前的姓名: angela
hello angela
修改后的姓名: andrew
hello andrew
这样,setName()修改内部属性时可以参数检查,如果传入参数不满足条件,就处理异常。
类的私有方法和私有变量类似,def __setName(self, name)。通过公有方法调用私有方法,self.__setName('Andrew')。
8.4继承
多态
封装
多重继承
参考资料:
参考资料: