Python语法第八课 - 面向对象

创建类

使用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("睡。。。")

 

成员属性

python类中可以包含成员属性。

当创建该类的对象时,对象都会默认具有该属性。

 

成员方法

python类中的方法和其他方法不同之处在于,方法中必须存在一个叫self的参数,这个self代表的当前对象本身,相当于java中的this

 

构造方法

python中的类可以指定构造方法。

在python类中定义名字为__init__的方法,就是python的构造方法。

 

创建对象

python中没有new关键字,直接使用类名就可以创建出对象

p = Person()

print(p.name)

p.eat()

 

 

增加 删除 对象的属性和方法

在python中,类的和对象关系并不是一种强关联,类仅仅是创建对象的模版,一旦对象创出来,对象就是一个独立的个体,可以自己增加或删除属性和方法.

注意,删除操作只能删除后天增加的属性和方法,对于类中的属性和方法无法删除

另外,可以在对象创建出来后增加删除属性方法,意味着哪怕是同一个类创建的对象,也可以非常的不同。

#增加属性

p1 = Person()

p1.age = 19

#增加方法

def study():

    print("学习。。。。")

p1.study=study

p1.study()

#删除属性

del p1.age

#删除方法

del p1.study

 

 

面向对象三大特性 - 封装 - 访问权限控制

python中类的属性和方法都可以进行访问权限的控制,控制的方法为:

  1. 属性或方法名称如果以单下划线开头,则表示属性或方法是保护成员,只能在类内部或子类内部访问,但是这仅仅是一种约定,在语法层面并没有这种限制。
  2. 属性或方法名称如果以双下划线开头,则是私有成员,只能在类的内部访问,外界无法使用,这是python语法的一部分。

class Person:

    __name = "zs"

    def __say(self):

        print("说 。。")

       

p = Person()

print(p.__name)

p.__say()

 

面向对象三大特性 - 继承

python类支持继承。python支持多继承。

继承的语法:

class subClass (superClass,[…]):

        类体

子类在构造时并不会自动调用父类的构造方法,如果需要,则应在子类的构造方法中显式的调用父类构造。

在子类中调用父类方法时,需要通过父类名来调用。

如果多重继承中,多个父类有同名方法,则具体继承到哪一个取决于父类的继承顺序,继承声明中越靠前优先级越高。

在子类中如果不喜欢父类的方法,可以进行重写操作,在子类中声明和父类名称和参数相同的方法,自己来实现。

class Person:

    name=""

    age=0

    def eat(self):

        print("吃..")

    def say(self):

        print("说..")

class Teacher(Person):       

    def teach(self):

        print("教..")

    def run(self):

        print("跑步..")

class Coder(Person):

    def code(self):

        print("写代码..")

    def run(self):

        print("跑代码..")

class JavaTeacher(Teacher,Coder):

    def run(self):

        print("边跑步边写代码..")

t1 = JavaTeacher()

t1.eat()

t1.say()

t1.code()

t1.teach() 

t1.run() 

面向对象三大特性 - 多态

Python中引用没有类型,引用可以先后等于完全不同类型的数据,自然也就没有多态的概念了。

类的内置属性

python的类中自动包含若干内置属性,这些内置属性往往具有特定功能

__dict__

类的属性(包含一个字典,由类的数据属性组成)

__doc__

类的文档字符串

__name__

类名

__module__

类定义所在的模块

__bases__

类的所有父类构成元素(包含了一个由所有父类组成的元组)

案例:

如果当前模块是程序的入口,则模块名会被改为__main__,如果不是则模块名等于文件名。

因此,通常在模块中会写这样的代码,从而让模块被直接执行和被import导入是执行不同逻辑

if __name__ =="__main__":

当模块被直接执行时走的逻辑

else:

当模块被import导入时执行的逻辑

 

类的内置方法

python中的类自带了很多基础方法,这些方法提供了类的特定功能。

可以在需要时通过重写来改造这些方法来实习特定的需求。

__init__(self [,args...])

构造函数,在创建对象时执行

__del__(self)

析构函数,在对象被销毁时执行

__str__(self)

用于将对象转换为一个字符串

__cmp__(self,x)

实现对象比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值