知识回顾——python3中的类和对象

Life is short,we need python

  python是一个极其优秀的脚本语言,也是一门面向对象的语言,Python的设计哲学是“优雅”、“明确”、“简单”,想要体验到使用Python的乐趣,学习python中面向对象的用法是必不可少的,本章来回顾一下个人掌握的python中的面向对象知识。

  当然,在学习具体的操作之前,我们先来回顾下什么是面向对象。

  我个人的理解是:面向对象是一种编程的方法,也是处理事物的一种方式,我们通过对象来处理事物。面向对象把事物的不同问题拆分,建立面向对象的目的不是为了解决事物中的某一步,而是提供了解决某一类问题的方法。

  面向对象的程序构建顺序为“从下到上”,在编程中优先写出解决某类问题的方法,再进行总体问题的解决。


  类(class)是描述相同属性方法的对象的集合,类定义了每个对象共有的属性方法。

  一个基本的类定义

class testclass:  # 一个简单的类
    i = 123

    def f(self):
        return 'hello world'


x = testclass()  # 实例化类
# 访问类的属性和方法
print('类的属性i为:', x.i)
print('类的方法f为:', x.f())

  python中的类定义了__init__方法,当实例化时,__init__方法就会被调用。

  

  这里来个栗子,我们定义一个最经典的学生类。

class Student():
    def __init__(self, name, scores):
    
    self.name = name  
    self.scores = scores
    # 这里的第二个name与传入参数的名称对应,而self.name为自己定义的名字
    #例如:也可以改为self.name = n ,此时上方参数也改为n

  传入的参数为name, scores ,而self表示将要创立的实例本身

  下面进行实例化,创建一个stu_1和一个stu_2对象实例。并进行调用。

stu_1 = Student('jack',80)  # 实例化,创建了stu_1这个对象,且对象中拥有两个实例变量
stu_2 = Student('alice',90)  # 创建了stu_2这个对象
print(stu_1.name,stu_2.name)  # 调用stu1,2 的名字,这在实例化时已经被存入
print(stu_1.scores,stu_2.scores)  # 调用stu1,2 的成绩

  运行后可以看到,jack alice 80 90 这几个数被打印出来。

 

  类中也可以定义私有对象属性,这体现了封装的特性。

class Person1:
    def __init__(self,name):
        self.name = name       # 对象属性
        self.__job = 'student'  # 私有对象属性,以双下划线开头,无法被外部访问

  python类也有继承的特性。

class Person:   # 父类
    def __init__(self,name,score):
        self.name = name
        self.score = score


class Student(Person):  # 子类,此时继承父类Person
    def __init__(self, name, score, gender):
        # 使用super语句初始化父类
        super(Student,self).__init__(name, score)
        self.gender = gender

# 子类也拥有了父类的属性

 

  python中的类特别定义了一些专有的方法,这些方法存放在python的函数库中。

 类的专有方法

# __init__ : 构造函数,在生成对象时调用
# __del__ : 析构函数,释放对象时使用
# __repr__ : 打印,转换
# __setitem__ : 按照索引赋值
# __getitem__: 按照索引获取值
# __len__: 获得长度
# __cmp__: 比较运算
# __call__: 函数调用
# __add__: 加运算
# __sub__: 减运算
# __mul__: 乘运算
# __truediv__: 除运算
# __mod__: 求余运算
# __pow__: 乘方

# 示例 class Vector: def __init__(self,a,b): self.a = a self.b = b # 表达重载 def __str__(self): return 'Vector(%d,%d)'%(self.a,self.b) # 加法重载 def __add__(self,other): return Vector(self.a + other.a, self.b + other.b) v1 = Vector(2,10) v2 = Vector(5,-2) print(v1 + v2)

   运行结果为Vector(7, 8)

  

  (python版本为3.6 , 部分例程参考菜鸟教程)

posted @ 2020-09-02 16:44  阿韬  阅读(355)  评论(0)    收藏  举报