面向对象
1.创建类
使用class语句来创建一个新类,class之后为类的名称并以冒号结尾,其中类的体的第一行可以写一个字符串,作为该类的文档声明,这个文档声明可以通过 ClassName.__doc__查看:
class ClassName:
'类的帮助信息' #类文档字符串
class_suite #类体
· 类的体中可以包含 成员属性 成员方法 构造方法等内容
class Person:
"代表人的类"
name=""
addr = "bj"
def __init__(self,name="zs"):
self.name = name
print("Person被构造了。。。")
def eat(self):
print("吃。。。")
def sleep(self):
print("睡。。。")
2.成员属性
python类中可以包含成员属性。当创建该类的对象时,对象都会默认具有该属性。
3.成员方法
python类中的方法和其他方法不同之处在于,方法中必须存在一个叫self的参数,这个self代表的当前对象本身,相当于java中的this
4.构造方法
python中的类可以指定构造方法。在python类中定义名字为__init__的方法,就是python的构造方法。
5.创建对象
python中没有new关键字,直接使用类名就可以创建出对象
p = Person()
print(p.name)
p.eat()
6.增加 删除 对象的属性和方法
在python中,类的和对象关系并不是一种强关联,类仅仅是创建对象的模版,一旦对象创出来,对象就是一个独立的个体,可以自己增加或删除属性和方法(只能删除后天增加的属性和方法,对于类的属性和方法无法删除),另外,可以在对象创建出来后增加删除属性方法,意味这哪怕是同一个类创建的对象,有可能大不相同
#增加属性
p1 = Person()
p1.age = 19
#增加方法
def study():
print("学习。。。。")
p1.study=study
p1.study()
#删除属性
del p1.age
#删除方法
del p1.study
java和python类和对象关系的对比:
在java中类是创建对象的模板,对象受制于类,属性和方法受类的约束
在python中类仅仅是创建对象的模板,当对象创建出来,是个独立的个体,就不受类的约束。可以增加属性和方法,但是对象只能删除自己后加的属性,不能删除从类中得到的属性和方法
7.类的内置属性
python的类中自动包含若干内置属性,这些内置属性往往具有特定功能
dict : 类的属性(包含一个字典,由类的数据属性组成)
doc : 类的文档字符串
name: 类名
module: 类定义所在的模块
bases : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
8.类的继承,重写,多态
python类支持继承。python支持多继承。
继承的语法:
class subClass (superClass,[…]):
类体
· 子类在构造时并不会自动调用父类的构造方法,如果需要,则应在子类的构造方法中显式的调用父类构造。
在子类中调用父类方法时,需要通过父类名来调用。
如果多重继承中,多个父类有同名方法,则具体继承到哪一个取决于父类的继承顺序,继承声明中越靠前优先级越高。通俗的说,如果继承多个父类时,这几个父类有相同的方法,则子类继承先继承的那个父类的方法。
在子类中如果不喜欢父类的方法,可以进行重写操作,在子类中声明和父类名称和参数相同的方法,自己来实现。
#coding=utf-8
class Teacher:
name = ""
def __init__(self,name):
self.name = name
def teach(self):
print(self.name+"讲课。。。")
def run(self):
print("跑步。。。")
class Coder:
def code(self):
print("写代码。。。")
def run(self):
print("运行代码。。。")
class JavaTeacher(Coder,Teacher):
def __init__(self,name):
Teacher.__init__(self, name)
def debug(self):
print("调试代码。。。")
def code(self):
print("边讲边写。。。")
jt = JavaTeacher("zs")
jt.teach()
jt.code()
jt.debug()
jt.run()
· python引用没有类型,所以引用可以先后等于完全不同类型的数据,自然也就没有多态的概念了。
9.类的访问权限控制
python中类 的属性和方法都可以进行访问权限的控制,控制的方法为:
属性或方法名称如果以单下划线开头,则是保护成员,只能在类内部或子类内部访问,这只是一种约定,并没有严格的限制
属性过方法名称如果以双下划线开头,则是私有成员,只能在类的内部访问,外界无法使用。
class Person:
__name = "zs"
def __say(self):
print("说 。。")
p = Person()
print(p.__name)
p.__say()
10.基础方法的重写
python中的类中自带很多基础方法,这些方法提供了类的特定功能,可以通过重写这些方法来实现这些特定功能的实现