首页 > 编程语言 >Python入门(10)——类

Python入门(10)——类

时间:2022-11-25 14:05:00浏览次数:36  
标签:__ 10 入门 Python self age id def name


在Python中,一切都是对象,对象是类的实例,类是对象的蓝图和模板。类是一个抽象的概念,对象是一个类具体的实例。每个对象都有属性和行为,它们都是独一无二的,而且对象一定属于某个类。当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定义出一个类。例如:学生都有学号、姓名等信息(属性),并且都有学习、吃饭等行为,我们就可以把所有学生抽象成一个学生类,而一个具体的学生就是一个对象。



定义类


使用 class 定义类,在类中定义的函数称为方法,下面的例子演示了如何定义一个学生类以及在类中定义方法。

class Student:
"""一个简单的学生类"""


def __init__(self, id, name):
"""初始化属性 id 和 name """
self.id = id
self.name = name


def study(self, course):
"""学生正在学习的课程"""
print(f'{self.name} 正在学习 {course}')


def eat(self):
"""模拟学生正在吃饭"""
print(f'{self.name} 正在吃饭')


其中,形参  self  必不可少,形参  self  代表类的实例,类的方法都必须有一个额外的参数  self ,必须位于其他形参的前面。 __init__()  是一个特殊方法,该方法用于在创建对象时进行初始化操作,即用户创建新实例时,都会自动运行它,请务必保证 __init__() 左右两边都有两个下划线。


使用类创建对象


当我们创建好类之后,就可以通过下面的方式创建类的实例(对象),并调用该实例的方法。

stu = Student('10010', 'Mary')
stu.study('Chinese')
stu.eat()

运行后的结果如下

Mary 正在学习 Chinese

Mary 正在吃饭


属性和方法的访问权限


在大多数面向对象编程语言中,通常会对对象的属性以及方法进行权限设置,例如在C++中有公有的(public)、私有的(private)和受保护的(protected)三种权限设置。而在Python中,属性和方法的访问权限只有两种,即公开的和私有的。默认属性是公开的,如果想要把属性设置成私有的,在属性命名时可以用两个下划线作为开头,以示此属性为私有的。

class Teacher:
"""一个简单的老师类"""


def __init__(self, name, age):
"""初始化属性 name 和 age """
self.name = name
self.__age = age


def __get_age(self):
"""获取 age"""
print(self.__age)


if __name__ == '__main__':
tea1 = Teacher('Mary', 30)
print(tea1.name)
print(tea1.__age)
tea1.__get_age()


当运行上面的程序时,tea1 的 name 会被打印出来,因为 name 是公有的属性。但是打印不了 __age 信息,因为 __age 属性和 __get_age() 方法都是私有的。


获取和修改属性


在Python中,如果想要获取或者修改对象的属性,可以直接写获取或者修改属性值的方法。当然,我们也可以使用  @property包装器  来包装getter和setter方法,使得对属性的获取更加方便。

class Student:
"""一个简单的学生类"""


def __init__(self, id, name):
"""初始化属性 id 和 name """
self._id = id
self._name = name

# getter 方法 - 访问器
@property
def id(self):
return self._id

# setter 方法 - 修改器
@id.setter
def id(self, id):
self._id = id


# getter 方法 - 访问器
@property
def name(self):
return self._name
# setter 方法 - 修改器
@name.setter
def name(self, name):
self._name = name


def study(self, course):
"""学生正在学习的课程"""
print(f'{self._name} 正在学习 {course}')


if __name__ == '__main__':
stu = Student('10010', 'Mary')
stu.name = 'John'
stu.id = '20020'
print(stu.id)
stu.study('Chinese')

输出的结果为

20020

John 正在学习 Chinese


继承


在Python中,可以在已有类的基础上创建新的类,这种方式称之为继承。已有的基础类我们称之为父类或超类或基类,在父类基础上创建的新类称之为子类或派生类或衍生类。子类继承了父类的所有属性和方法,同时还可以自定义自己的属性和方法。

class Person(object):
"""人类"""


def __init__(self, name, age):
"""初始化属性 name 和 age"""
self._name = name
self._age = age


@property
def name(self):
return self._name


@name.setter
def name(self, name):
self._name = name

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


@age.setter
def age(self, age):
self._age = age


def play(self):
"""模拟人玩耍的方法"""
print(f'{self._name} 正在玩耍')


class Student(Person):
"""学生类"""


def __init__(self, name, age, id):
"""初始化属性"""
# 调用父类构造方法初始化属性值
super().__init__(name, age)
self._id = id


@property
def id(self):
return self._id


@id.setter
def id(self, id):
self._id = id


def study(self, course):
"""学生正在学习的课程"""
print(f'{self._name} 正在学习 {course}')


if __name__ == '__main__':
stu = Student('Mary', 16, '10010')
stu.study('Chinese')
stu.play()


结果输出为

Mary 正在学习 Chinese

Mary 正在玩耍


多态


子类在继承了父类的方法后,可以对父类已有的方法进行重写(override)。通过方法重写可以让父类的同一个行为在子类中拥有不同的实现版本,即同一个父类的不同的子类对象调用同个父类的方法会表现出不同的行为,这称之为多态。

class Animals(object):
"""动物类"""


def __init__(self, name):
"""初始化属性 name """
self._name = name


def speak(self):
"""模拟动物发声的方法"""
pass


class Dog(Animals):
"""狗类"""


def __init__(self, name):
"""初始化属性"""
super().__init__(name)


def speak(self):
"""模拟狗发声的方法"""
print('汪汪汪')


class Cat(Animals):
"""猫类"""


def __init__(self, name):
"""初始化属性"""
super().__init__(name)


def speak(self):
"""模拟猫发声的方法"""
print('喵喵喵')


if __name__ == '__main__':
dog = Dog('dog')
dog.speak()
cat = Cat('cat')
cat.speak()


结果输出为

汪汪汪

喵喵喵




标签:__,10,入门,Python,self,age,id,def,name
From: https://blog.51cto.com/u_15891283/5886626

相关文章

  • Python入门(8)——集合
    集合的创建    集合是由不重复元素组成的无序容器。创建集合用 {} 大括号或 set() 函数。注意,创建空集合只能用 set() ,不能用 {} , {} 创建的是空字典。......
  • 最全的Python海龟绘图总结
    在Python中使用海龟绘图,需要导入相应的模块,那么什么是模块呢?逻辑上来说模块就是一组功能的组合;实质上一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上......
  • Python入门(7)——元组与字典
    元组元组的定义    不可修改的列表称为元组。元组定义与列表定义的区别在于列表使用 [] 标识,而元组使用 () 标识。严格地说,元组是由逗号 , 标识的,圆括号只是让......
  • Python入门(5)——分支与循环
    使用功能更强大的IDEPyCharm是一款功能强大的Python编辑器,具有跨平台性。学习分支语句及循环语句,为了我们调试方便,我们后期选择使用PyCharm,PyCharm可以直接到官网下载......
  • Python入门(6)——列表
    列表的定义列表是由一系列按特定顺序排列的元素组成。列表可以包含不同类型的元素。列表内元素的值可以重复。列表通常用单词名称的复数表示。列表用方括号 [] 表示,元素......
  • Python入门(3)——基本数据类型及运算符
    常见的几种基本数据类型python是弱类型语言,相对于强类型语言,它不需要声明变量的类型。在Python中一切都是对象。可以使用id()函数查看此对象的id。Python中的数据类型很多,而......
  • Python入门(4)——最全的字符串操作
    修改字符串大小写title():把字符串中每个单词首字母改为大写。upper():把字符串中所有字符改为大写。lower():把字符串中所有字符改为小写。>>>'theintroductiontopython'.......
  • Python入门(2)——变量与常量
    IDLE-Python集成开发环境刚开始学习Python,我们可以直接使用Python自带的IDE——IDLE进行编程。在Windows开始菜单中,搜索IDLE,打开即可进行Python编程。接下来一段时间,我们先......
  • Python入门(1)——搭建环境
    Life is short,you need Python.--BruceEckel​“人生苦短,我用Python”Python由荷兰数学和计算机科学研究学会的GuidovanRossum于1990 年代初设计。因其简单易学,如......
  • ElasticSuite but this cluster currently has [1000]/[1000] maximum shards open
    分析:Elasticsearch7.x默认cluster.max_shards_per_node为1000操作:调整分片为每个节点的分片为10000通过API进行修改PUT/_cluster/settings{"persi......