[Python]类与对象是什么?属性与方法?

本文介绍了Python中的面向对象编程概念,包括类的定义、对象的创建与实例化、类成员与成员操作、成员方法与操作、构造方法的使用。通过实例展示了如何创建学生类,并探讨了如何通过类方法区分不同对象,如小明、小红等。同时,讲解了__init__()构造方法在初始化实例变量时的作用。
摘要由CSDN通过智能技术生成

在真实世界的校园内有学生有老师,学生有自己的姓名、性别、学号或班级,老师也有对应的属性,如果我们需要围绕整个校园开发一个管理系统时,那么学生、老师可以比喻为类,徐同学、王同学是学生类里面的个体,被称为对象,对象也被称为实例

比如定义一个汽车类(cars),那么宝马、奔驰、奥迪就是类里面的对象

定义类

Python中的数据类型都是类,我们可以自定义类,即创建一种新的数据类型

class Car(obj):  # 类
	pass  # 占位

创建对象

如果说类相当于一个模板,那么依据这个模板来创建对象,这个就是类的实例化,所以对象也被称为“实例”

class Car():
	pass
car = Car() < —— 创建一个汽车对象,小括号表示构造调用方法,用于初始化
 ^
 |
刚刚创建的一个汽车对象

以car = Car()这样的语句,我们可以创建一个“汽车”实例,即一个具体的“汽车”对象,而在类名Car后加(),组成一个类似函数调用的形式Car(),则执行了一个叫做实例化的过程,即根据定义好的规则,创建一个包含具体数据的“汽车”对象

类成员与成员操作

在一个构造的类体中,可以创建类的属性,类的方法,比如我创建了一个叫ganyu的类,我可以赋予给它姓名、性别等属性,也可以赋予它方法

class GanYu:
    # 属性
    sex = '女'
    name = 'admin'
    passwd = 123

并且在类的外部可以通过“对象.实例变量”的方式进行访问和操作

class GanYu:
    # 属性
    sex = '女'
    name = 'admin'
    passwd = 123
    
# 1、访问
r1 = GanYu.sex
print(r1)  # 女

# 2、修改类成员的属性
r2 = GanYu.sex = 'girl'
print(r2)  # girl

# 如果通过类把属性进行类修改,那么再通过这个类实例化的对象,它的属性是什么?之前创建的对象呢
r3 = GanYu()
print(r3.sex)  # 输出修改后的结果,结果为girl

# 给类添加成员
GanYu.like = 'swim'
print(GanYu.like)  # 添加成功

# 通过类创建对象是否也存在这个属性呢?之前创建的对象和之后创建的对象
print(r3.like)  #存在

# 删除类的成员
del GanYu.sex

成员方法与操作

以创建一个“学生”类为例

class Student(obj):
	pass

这样就可以创建一个以“学生”的实例,即一个具体的“学生”对象,那么问题来了,小王同学也是归于学生类,小明同学也是归于学生类,他们如何区分呢  

class Student:
    def xiaoming(self):
        print('我是小明')
        
    def xiaoya(self):
        print('我是小雅')
        
    def xiaohong(self):
        print('我是小红')

a = Student()

# 访问小明
# 如果这个对象没有自己独立的方法,那么会访问这个对象的类的方法
r3 = a.xiaoming()

# 小红退学了,小张来了,修改小红为小张
def xiaohong():
    print('新的同学,小张')
a.xiaohong = xiaohong
a.xiaohong()

# 小红又来了,给对象添加新的方法
def fun():
    print('新的同学,小红')
a.newfunc = fun
a.newfunc()

# 删除方法,只能删除自己的****
del a.newfun

构造方法

类中有一个_ _init __()方法用于创建和初始化实例变量,这种方法被称为构造方法

假设我们需要处理很多学生实例,比如小米、小红、小雅等等,这样不但带来书写上的麻烦,还容易带来错误,这里就可以使用在执行实例化过程Student()时传入一些参数,以方便且正确地初始化/设置一些属性值,那么如何定义这种初始化行为呢?

class Student():
    def __init__(self, name='以xx为例', sex='以xx为例', age='以xx为例'):  # 第一个参数必须是self,但是不需要传入任何东西,默认从第二个开始传入,并且用来初始化实例变量
        self.name = name
        self.sex = sex
        self.age = age  # 创建与初始化实例变量


xiaoming = Student(name='小明', age='12', sex='男')
print(xiaoming.name, xiaoming.age, xiaoming.sex, )
# 带有默认值的构造方法,能够为调用者提供多个不同的构造方法,如果什么都不传,则使用默认方法
xiaohong = Student()
print(xiaohong.name)

实例方法的操作

class Student():
    def __init__(self, name='以xx为例', sex='以xx为例', age='以xx为例'):  # 第一个参数必须是self,但是不需要传入任何东西,默认从第二个开始传入

        self.name = name
        self.sex = sex
        self.age = age  # 创建与初始化实例变量

    def run(self):
        print(f'{self.name}唱')

    def jump(self):
        print('跳')

    def rap(self):
        print('rap')


xiaoming = Student(name='小明')
xiaoming.run()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值