8.类和对象

目录

一、对象

1.概念

2.对象的组成

3.创建

4.对象的名称

5.对象属性和方法的引用

6.面向对象编程

二、类的定义和调用

1.概念

2.类的定义

3.类的初始化

4.类的调用

 三、类定义中的特殊方法

1.概念

2.对象构造器

3.析构器

4.算数操作

a.算术操作符

b.反运算

c.比大小

5.字符串操作

四、自定义对象的排序

1.列表排序

a.列表方法sort()

b.通用函数sorted()

c.特殊方法__lt__

五、类的继承

1.概念

2.代码复用:

3.实现

4.覆盖

5.添加属性

六、关于self

七、上机练习

第一个:创建类

第二个:创建子类

第三个:继承内置数据类型


一、对象

1.概念

万物皆对象

Python中的所有事物都是以对象形式存在,从简单的数据类型,到复杂的代码模块,都是对象

既表示客观世界问题空间中的某个具体事物,又表示软件系统解空间中的基本元素

2.对象的组成

对象=属性+方法

对象以id作为标识,既包含数据(属性),又包含代码(方法),是某一类具体事物的特殊实例

3.创建

对象是类的实例,是程序的基本单元

要创建一个新的对象,首先必须定义一个类,用以指明该类型的对象所包含的内容(属性和方法)

同一类(class)的对象具有相同的属性和方法,但属性值和id不同

4.对象的名称

赋值语句给予对象以名称,对象可以有多个名称(变量引用),但只有一个id

例:a = complex(1,2)

对象实现了属性和方法的封装,是一种数据抽象机制

提高了软件的重用性、灵活性、拓展性

5.对象属性和方法的引用

<对象名>.<属性名>

可以跟一般的变量一样,用在赋值语句和表达式中

Python语言具有动态的特征,使得对象可以随时增加或者删除属性或者方法

6.面向对象编程

面向对象编程是一种程序设计泛型,同时也是一种程序开发方法

程序中包含各种独立而又能相互调用的对象,每个对象都能接受处理数据,并将数据传递给其他对象

二、类的定义和调用

1.概念

类是对象的模板,封装了对应现实实体的性质和行为

实例对象是类的具体化

类的出现为面向对象编程的三个重要的特性提供了实现的手段:封装性,继承性,多态性

和函数相似类是一系列代码的封装

python中约定类名用大写字母开头,函数用小写字母开头,以便区分

2.类的定义

class<类名>:

        <一系列方法的调用>

3.类的初始化

class<类名>:

       def __init__(self,<参数表>):

        def <方法名>(self,<参数表>):

__init__():一个特殊的函数名,用于根据类的定义创建实例对象,第一个参数必须是self

4.类的调用

<类名>(<参数>)

调用类会创建一个对象(注意括号!)

        obj = <类名>(<参数表>)

返回一个对象实例

类方法中的self指这个对象实例

使用(.)调用对象的方法

t = turtle.Pen()

t.forward(100)

t.left(90)

...

 三、类定义中的特殊方法

1.概念

特殊方法也被称作魔术方法

在类定义中实现一些特殊方法,可以方便地使用python中的一些内置操作,所有特殊方法的名称以两个下划线(__)开始和结束

2.对象构造器

__init__(self,[...)

对象的构造器,实例化对象时调用

3.析构器

__del__(self,[...)

销毁对象时调用

4.算数操作

a.算术操作符

b.反运算

当左操作时不支持相应的操作时被调用

c.比大小

5.字符串操作

字符串可以利用算数操作符中的+来拼接,*来复制

四、自定义对象的排序

1.列表排序

a.列表方法sort()

对原列表进行排序,改变原列表的内容

如果列表中的元素都是数字,默认按升序排序

如果添加参数reverse=True,可改为降序排序

如果元素都是字符串,则会按照字母表顺序排序

b.通用函数sorted()

类似sort(),但返回的时排序好的列表副本,原列表内容不变

注意:只有当列表中的元素都是同一种类型时,才能排序

c.特殊方法__lt__

由于python的可扩展性,每种数据类型可以定义特殊方法

def __lt__(self,y)

返回True,视为比y小,排在前

返回false,视为比y大,排在后

只要类定义中定义了特殊方法__lt__,任意自定义类都可以使用x<y这样的比较

注:成绩高的在前,所以__lt__返回值应该是true

五、类的继承

1.概念

如果一个类别A继承自另一个类别B,就把继承者A称为子类,被继承者类B称为父类、基类或超类

2.代码复用:

利用继承可以从已有类中衍生出新的类,添加或修改部分功能

新类具有旧类中的各种属性和方法,而不需要进行任何复制

3.实现

如果两个类具有’一般-特殊‘的逻辑关系,那么特殊类就可以作为一般类的“子类”来定义,从“父类”继承属性和方法

class <子类名>(<父类名>):

        def <重定义方法>(self,...):

4.覆盖

子类对象可以调用父类方法,除非这个方法在子类中重新定义了

如果子类同名方法覆盖了父类的方法,仍然可以在父类对象中调用父类的方法

5.添加属性

子类可以添加父类中没有的方法和属性

六、关于self

在类定义中,所有方法的首个参数一般都是self

self的作用,在类内部实例化过程中传入的所有数据都赋给这个变量

self实际上代表对象实例

<对象>.<方法>(<参数>)

等价于:

<类>.<方法>(<对象>,<参数>)

这里的对象就是self

七、上机练习

第一个:创建类

第二个:创建子类

一二一起写了:

class People:
    def __init__(self,name,city):
        self.name=name
        self.city=city
    def __str__(self):
        return "(%s,%s)"%(self.name,self.city)
    def moveto(self,newcity):
        self.city=newcity
    #def __lt__(self,other):
    #    return self.city<other.city
    def __lt__(self,other):
        return self.name<other.name
    __repr__=__str__


class Teacher(People):
    def __init__(self, name, city, school):
        super().__init__(name, city)
        self.school = school

    def __str__(self):
        return "(%s,%s,%s)" % (self.name, self.city, self.school)

    def __lt__(self, other):
        return self.school < other.school

    __repr__ = __str__


a=list()
a.append(Teacher('c','cc','ccc'))
a.append(Teacher('a','aa','aaa'))
a.append(Teacher('b','bb','bbb'))
a.append(Teacher('d','dd','ddd'))
print(a)
b=sorted(a)
print(b)

第三个:继承内置数据类型

class Mylist(list):
    def __init__(self, *args):
        super().__init__(*args)

    def product(self):
        result = 1
        for num in self:
            result *= num
        return result
a = Mylist([1, 2, 3, 4, 5,7,247,457,5273,574,5474,746])
print(Mylist.product(a))

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值