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