当前位置: 首页 > article >正文

python基础 | 类与继承

1、类

在Python中,使⽤class关键字定义类,类是⼀个抽象描述,并不是真正的存在,
需要把它初始化才会产⽣⼀个真正的事物,我们称之为对象
在编程过程中,拥有⾏为(函数)和数据的是对象,⽽不是类

class Person:
    pass  # An empty block

p = Person()
print(p)

输出结果:

<__main__.Person object at 0x0000022256BD16D0>

创建了类Person的对象,将其打印出来

class Person1:
    def sayHi(self):
        print('Hello, how are you?')


p1 = Person1()
p1.sayHi()

输出结果:
Hello, how are you?
成员函数创建对象调用

1、Python 中所有的类成员(包括数据成员)默认都是公有的,没有权限控制符
2、如果你使⽤的数据成员名称以双下划线前缀,⽐如 __privatevar,Python 的名称管理体系会有效地把它作为私有变量(约定俗成的规定)
3、这样就有⼀个惯例,如果某个变量只想在类或对象中使⽤,就应该以单下划线前缀。⽽其他的名称都将作为公共的,可以被其他类或者对象使⽤。记住这只是⼀个惯例,并不是Python所要求的(与双下划线前缀不同)

class Person2:
    def __init__(self, name):
        self.name = name

    def sayHi(self):
        print('Hello, my name is', self.name)


p2 = Person2('张三')
p2.sayHi()

输出结果:
Hello, my name is 张三
def __init__(self, name):类似于c++构造函数,对象创建的初始化
Person2('张三'):将字符串 张三 传进去

class Person3:
    # 统计人口数量
    population = 0

    # 类的初始化
    def __init__(self, name):
        self.name = name
        print('(Initializing %s)' % self.name)
        Person3.population += 1
    # 成员函数
    def sayHi(self):
        print('Hi, my name is %s.' % self.name)

    def howMany(self):
        if Person3.population == 1:
            print('I am the only person here.')
        else:
            print('We have %d persons here.' % Person3.population)


zs = Person3('张三')
zs.sayHi()
zs.howMany()

ls = Person3('李四')
ls.sayHi()
ls.howMany()

zs.sayHi()
zs.howMany()
print("\n\n")

输出结果:
(Initializing 张三)
Hi, my name is 张三.
I am the only person here.
(Initializing 李四)
Hi, my name is 李四.
We have 2 persons here.
Hi, my name is 张三.
We have 2 persons here.

成员变量的使用

2、类的继承

# 基类(父类)
class SchoolMember:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('(Initialized SchoolMember: %s)' % self.name)

    def tell(self):
        print('Name:"%s" Age:"%s"' % (self.name, self.age))

# 派生类(子类)
class Teacher(SchoolMember):
    def __init__(self, name, age, salary):
        SchoolMember.__init__(self, name, age)  # 先调用基类的
        self.salary = salary
        print('(Initialized Teacher: %s)' % self.name) # 调用父类的对象,使用自己的参数

    def tell(self):
        SchoolMember.tell(self)  # 调用基类的函数
        print('Salary: "%d"' % self.salary) # 调用自己的类中的成员变量


class Student(SchoolMember):
    def __init__(self, name, age, marks):
        SchoolMember.__init__(self, name, age)
        self.marks = marks
        print('(Initialized Student: %s)' % self.name) # 把父类的对象也继承了

    def tell(self):
        SchoolMember.tell(self) # 基类有自己的tell函数,调用基类的函数,加上自己的语句
        print('Marks: "%d"' % self.marks)


t = Teacher('张老师', 40, 30000)
s = Student('王二', 22, 75)
members = [t, s]  # 列表有两个成员
for member in members:
    member.tell()

输出结果:
(Initialized SchoolMember: 张老师)
(Initialized Teacher: 张老师)
(Initialized SchoolMember: 王二)
(Initialized Student: 王二)
Name:“张老师” Age:“40”
Salary: “30000”
Name:“王二” Age:“22”
Marks: “75”


http://www.kler.cn/a/134316.html

相关文章:

  • Java面向对象编程进阶之包装类
  • Nuxt 版本 2 和 版本 3 的区别
  • Openstack7--安装消息队列服务RabbitMQ
  • 使用 start-local 脚本在本地运行 Elasticsearch
  • Blender进阶:图像纹理节点和映射节点
  • C#程序开发,检测当前电脑已经安装的软件目录
  • 小迪安全笔记(2)——web应用架构搭建漏洞HTTP数据包代理服务器
  • hive sql多表练习
  • 【原创】WeChat Server搭建
  • 【开源】基于Vue和SpringBoot的教学过程管理系统
  • 【C++】【Opencv】霍夫直线检测即cv::HoughLinesP()函数详解和示例
  • 深度学习:到底怎么理解embedding
  • 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
  • 控制您的音乐、视频等媒体内容
  • 精通Nginx(15)-支持CORS
  • 基于单片机音乐弹奏播放DS1302万年历显示及源程序
  • 论文速览 Arxiv 2023 | DMV3D: 单阶段3D生成方法
  • 音视频技术在手机上的应用与挑战
  • GPT-4要点内容记录
  • 迪克森电荷泵
  • 网络割接用VRRP替换HSRP
  • 二叉树oj题集(LeetCode)
  • vnodeToString函数把vnode转为string(innerhtml)
  • Rust动态数组Vec
  • Linux调试器---gdb的使用
  • Spark 平障录