Python进阶丨面向对象编程 —— 类和实例

本文详细介绍了Python中的面向对象编程,包括类的定义、实例化、类属性绑定,以及数据封装的概念。通过类可以创建具有特定属性和方法的对象。在类中,__init__方法用于初始化实例时绑定属性,而数据封装允许我们通过定义方法来访问和操作实例的数据,实现信息隐藏和安全性。
摘要由CSDN通过智能技术生成

类和实例

  • 描述

类是用来创建数据结构和新类型对象的主要机制。一个类定义了一系列与其实例对象密切关联的属性,典型的属性包括变量(实例化称为属性)和函数(实例化称为方法)

  • 类的定义

定义类是通过class关键字

class Student(object):
    pass

class后面Student是类名,通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的。如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类

  • 类实例化

定义好类,就可以根据类名创建出实例,创建实例是通过类名+()实现的

class Student(object):
    pass
    
st = Student()
print(st)
# 输出结果:<__main__.Student object at 0x0000025A20B93F98>

print(Student)
# 输出结果:<class '__main__.Student'>

变量st指向的就是一个Student的实例,而Student本身则是一个类

  • 类属性绑定

可以自由地给一个实例变量绑定属性

class Student(object):
    pass
    
st = Student()
st.name = 'spider man'

print(st.name)
# 输出结果:spider man

给实例st绑定一个name属性

由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填进去。通过定义一个特殊的__init__()方法(前后分别是两个下划线),在创建实例的时候,就把属性绑定上去

class Student(object):
    
    def __init__(self, name, socre):
        self.name = name 
        self.socre = score

__init__方法的第一个参数永远是self,表示创建的实例本身,因此在__init__方法内部,可以把各种属性绑定到self,因为self就是指向创建的实例本身

有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去

class Student(object):
    
    def __init__(self, name, score):
        self.name = name 
        self.score = score
st = Student('man', 30)

print(st.name, st.score)
# 输出结果:man 30

注:与普通函数相比,类定义的函数第一个参数永远是实例变量self,并且,调用时不用传递该参数

  • 数据封装

面向对象编程的一个重要特点就是数据封装

可以通过函数来访问这些数据,例打印学生的姓名和成绩

class Student(object):
    
    def __init__(self, name, score):
        self.name = name 
        self.score = score
st = Student('good man', 80)

def print_student(参数):
    print('{}:{}'.format(st.name, st.score))

print_student(st)
# 输出结果: good man:80

既然实例本身就拥有这些数据,要访问这些数据,可以直接在类的内部定义访问数据的函数。这些封装数据的函数是和student类本身关联起来的,称之为类的方法

class Student(object):
    
    def __init__(self, name, score):
        self.name = name 
        self.score = score
    
    def print_student(self):
        print('{}:{}'.format(self.name, self.score))

st = Student('bad man', 30)
st.print_student()
# 输出结果:bad man:30

封装的另一个好处是给Student类增加新的方法

class Student(object):
    
    def __init__(self, name, score):
        self.name = name 
        self.score = score
    
    def print_student(self):
        print('{}:{}:{}'.format(self.name,self.score))

    def get_grade(self):
        if self.score >= 90:
            return 'a'
        elif self.score >= 60:
            return 'b'
        else:
            return 'c'

st1 = Student('man1', 100)
st2 = Student('man2', 59)

print(st1.name, st1.get_grade())
# 输出结果:man1 a

print(st2.name, st2.get_grade())
# 输出结果:man2 c

注:类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都相互独立,互不影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值