Python基础-类与对象
1、类的使用
类是对象的一个具体描述,对象的属性和方法都是由类进行定义和设置的。类主要分为属性和方法,属性就好比人的姓名、性别和学历等,用于对人的描述;方法就如人的四肢和五官,可以实现某些简单的操作。完整的类定义的语法如下:
class Person(object):
# 定义静态属性
name = '小黄'
# 定义动态属性
def __init__(self): # __init__是类的初始化方法
self.age = '18'
# 定义普通方法
def foot(self): # 至少有一个selef参数
print('这是我的脚,由普通方法实现')
# 定义类方法,由classmethod装饰器实现
@classmethod
def class_hand(cls): # 至少有一个cls参数
print('这是我的手,由类方法实现')
# 定义静态方法,由staticmethod装饰器实现
@staticmethod
def static_mouth(): # 无默认参数
print('这是我的嘴,由静态方法实现')
if __name__ == '__main__':
# 获取静态属性
# 方法1,直接调用
print('静态属性:',Person.name)
# 方法2,实例化后再调用
person = Person()
print('静态属性:',person.name)
# 获取动态属性
person = Person()
print('动态属性:', person.age)
# 调用普通方法
person = Person()
person.foot()
# 调用类方法
# 方法1,直接调用
Person.class_hand()
# 方法2,实例化后再调用
person = Person()
person.class_hand()
# 调用静态方法
# 方法1,直接调用
Person.static_mouth()
# 方法2,实例化后再调用
person = Person()
person.static_mouth()
执行结果:
静态属性: 小黄
静态属性: 小黄
动态属性: 18
这是我的脚,由普通方法实现
这是我的手,由类方法实现
这是我的手,由类方法实现
这是我的嘴,由静态方法实现
这是我的嘴,由静态方法实现
类由class定义,命名方式采用驼峰式命名
Person类定义了类的属性和方法,类属性又分为静态属性和动态属性;类的方法分为普通方法、类方法和静态方法。静态属性和动态属性的最大区别在于使用方式的不同,前者具备两种使用方式,后者需要将类实例化后才能使用。普通方法、类方法和静态方法也是如此,前者只能实例化后才能使用,后两者具备两种使用方式。
如果在初始化方法里面设置类的参数,在调用类的时候,类的实例化也应设置相应的参数。具体的使用方式如下述代码所示:
class Person(object):
def __init__(self,name): # 重写__init__并设置实例化参数name
self.name = name
if __name__ == '__main__':
person = Person('小黄') # 实例化时必须设置name参数值
print(person.name)
2、类的封装
封装是将程序中某些功能的执行过程写到函数或类里面,当程序调用函数或类时即可实现程序的功能。
将类的属性或方法设置为私有,只允许在类的内部使用。定义私有属性或方法只需要在属性名和方法名之前加双下划线即可,具体的代码如下:
class Person (object):
# 定义私有属性name和公有属性age
def __init__(self,name):
self.__name=name
self.age = 10
# 定义私有方法
def __get_age(self): # 方法名前加双下划线
return self.age
# 定义普通方法
def get_name(self):
return self.__name
if __name__ == '__main__':
p = Person('LiLy')
# 读取共有属性和普通方法
print('公有属性age的属性值:',p.age)
print('共有方法get_name的返回值:',p.get_name())
# 强制读取私有属性和调用私有方法
print('强制读取私有属性,属性值:',p._Person__name)
print('强制读取私有方法,返回值:',p._Person__get_age())
3、类的继承
子类拥有父类的所有属性和方法,而且子类可重写父类的属性和方法或自定义新的属性和方法
# 定义父类Person
class Person (object):
# 定义私有属性name和公有属性age
def __init__(self,name):
self.__name=name
self.age = 10
# 定义私有方法
def __get_age(self): # 方法名前加双下划线
return self.age
# 定义普通方法
def get_name(self):
return self.__name
# 定义子类Student
class Student (Person):
# 自定义普通方法
def student_name(self):
# 继承Person,通过强制操作方式来获取父类的私有属性
return self._Person__name
if __name__ == '__main__':
s=Student('Lucy')
# 调用父类的普通方法get_name
print('调用父类的普通方法:',s.get_name())
# 调用父类的私有方法
print('调用父类的私有方法:', s._Person__get_age())
如果Student类需要继承多个类,可以在小括号里填写,每个类之间使用英文格式的逗号隔开。在子类Student里面,只是定义了普通方法student_name,由于它的父类是Person,因此它还具有父类的属性__name和age、父类的方法__get_age和get_name。
子类可以重写父类的同名方法,重写以后,父类的方法并不会改变,但是子类在调用该方法的时候自动调用重写后的方法。