【Python知识点】-面向对象编程

本文详细介绍面向对象编程的基本概念,包括如何创建实例、初始化实例属性、定义类属性以及访问限制等核心内容,帮助初学者快速掌握面向对象编程的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象编程

面向对象编程是一种程序设计范式,把程序看作不同对象的相互调用,对现实世界建立对象模型。

创建实例

定义一个Person类如下:

class Person(object):
    pass

格式为:

class 类名(object): # object表示定义的类是由那个类继承下来的
    函数体
    pass

类名一般以大写开头。创建实例使用类名 + (),类似函数的形式创建:

XvSong = Person() # 创建”许嵩“对象

初始化实例属性

在定义 Person 类时,可以为Person类添加一个特殊的init()方法,当创建实例时init()方法,当创建实例时,__init__()方法被自动调用,能在此为每个实例都统一加上以下属性:

class Person(object):
    def __init__(self, name, gender, birth):
        self.name = name
        self.gender = gender
        self.birth = birth

__init__()方法的第一个参数必须是 self,后续参数则可以自由指定。创建实例时,就必须要提供除 self以外的参数:

XvSong = Person('XvSong', 'Male', '1987-1-1')

要定义关键字参数,使用 **kw;除了可以直接使用self.name = 'xxx’设置一个属性外,还可以通过 setattr(self, ‘name’, ‘xxx’) 设置属性。下面是一个例子:

定义Person类的__init__方法,除了接受 namegenderbirth外,还可接受任意关键字参数,并把他们都作为属性赋值给实例。

参考代码如下:

class Person(object):
    def __init__(self, name, gender, **kw):
        self.name =name
        self.gender = gender
        for k, v in kw.items():
            setattr(self, k, v)
            pass
        pass
    pass

再输入:

XvSong = Person('XvSong', 'Male', job='Singer', face='Beautiful')
print(XvSong.name)
print(XvSong.job)
print(XvSong.face)

输出如下:

XvSong
Singer
Beautiful

创建类属性

定义类属性可以直接在 class 中定义:

class Person(object):
    address = 'Earth'
    def __init__(self, name):
        self.name = name

因为类属性是直接绑定在类上的,所以,访问类属性不需要创建实例,就可以直接访问:

print(Person.address)

输出如下:

Earth

Python是动态语言,类属性也是可以动态添加和修改的:

Person.address = 'China'
print(Person.address)

输出如下:

China

因为类属性只有一份,所以,当Person类的address改变时,所有实例访问到的类属性都改变了。 在 class 中定义的实例方法其实也是属性,它实际上是一个函数对象:

class Person(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def get_grade(self):
        return 'A'

再输入:

p1 = Person('Bob', 90)
print(p1.get_grade)

输出如下:

<bound method Person.get_grade of <__main__.Person object at 0x0148FE90>>

输入如下:

print(p1.get_grade())

输出如下:

A

就是说,p1.get_grade返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade()才是方法调用。

访问限制

可以给一个实例绑定很多属性,如果有些属性不希望被外部访问到怎么办?Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。下面的代码是一个例子:

class Person(object):
    def __init__(self, name):
        self.name = name
        self._title = 'Mr'
        self.__job = 'Student'

输入如下:

p = Person('Bob')
print(p.name)

输出如下:

Bob

输入如下:

print(p._title)

输出如下:

Mr

输入如下:

print(p.__job)

运行上面一行后会出错。

如果一个属性以__xxx__的形式定义,那它又可以被外部访问了。以__xxx__定义的属性在Python的类中被称为特殊属性。有很多预定义的特殊属性可以使用,通常不要把普通属性用__xxx__定义。以单下划线开头的属性_xxx虽然也可以被外部访问,但是,按照习惯不应该被外部访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值