Python进阶-面向对象编程

Python

类定义和创建实例

  • 类定义
    Python中,类定义通过 class 关键字进行定义。
class User(object):
    pass

按照惯例,类名以大写字母开头,紧接着是(object),表示该类是从 object 类进行继承的。

  • 创建实例
    创建实例使用: 类名+()
user=User()

定义实例属性

可以在类的构造函数 __init()__定义类的属性。

class User(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age


user = User('messi', '29')
print(user.name + ',' + user.age)
#messi,29

访问权限

Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。

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

print(p.name)#messi
print(p._title)#Mr
print(p.__job)
#AttributeError: 'Person' object has no attribute '__job'

从上面的例子中可以发现,只有以双下划线开头的”__job”不能直接被外部访问。

但是,如果一个属性以”__xxx__”的形式定义,那它又可以被外部访问了,以”__xxx__”定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用”__xxx__”定义。

class Person(object):
    def __init__(self, name):
        self.name = name
        self._title = 'Mr'
        self.__job__ = 'FootballPlayer'
p = Person('messi')

print(p.name)#messi
print(p._title)#Mr
print(p.__job__)#FootballPlayer

注意:以单下划线开头的属性”_xxx”虽然也可以被外部访问,但是,按照习惯,它们不应该被外部访问。

类属性

  • 与实例属性的区别
class Person(object):
    address = 'China'
    def __init__(self, name):
        self.name = name
p1 = Person('LiuDeHua')
p2 = Person('ZhangXueYOU')
print(p1.address)#China
print(p2.address)#China

实例方法

访问权限章节说道:如果一个属性由双下划线开头(__),该属性就无法被外部访问。但是我们可以通过定义实例方法从类的内部进行访问。

可以通过调用实例方法来访问__job属性。

class Person(object):
    def __init__(self, name):
        self.name = name
        self._title = 'Mr'
        self.__job = 'FootballPlayer'
    def  get_job(self):
        return self.__job
p = Person('messi')
print(p.get_job())#FootballPlayer

类方法

和属性相似,方法也分为实例方法类方法,在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。在 class 中定义类方法,需要运用注解@classmethod

class User(object):
    hobby = 'football'

    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def get_name(cls):
        return cls.hobby

if __name__ == '__main__':
    user = User('messi', 29)
    print(User.get_name())#football

介绍了@classmethod,这里还介绍下注解@property。当类中的方法上使用注解@property,类的实例可以像访问属性一样调用方法。

class User(object):
    hobby = 'football'

    def __init__(self, name, age):
        self.name = name
        self.age = age

    @property
    def get_age(self):
        return self.age


if __name__ == '__main__':
    user = User('messi', 29)
    print(user.get_age)#29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值