• python基础 | 类与继承


    1、类

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

    class Person:
        pass  # An empty block
    
    p = Person()
    print(p)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出结果:

    <__main__.Person object at 0x0000022256BD16D0>
    
    • 1

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

    class Person1:
        def sayHi(self):
            print('Hello, how are you?')
    
    
    p1 = Person1()
    p1.sayHi()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输出结果:
    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    输出结果:
    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")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    输出结果:
    (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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

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

  • 相关阅读:
    css问题
    5.0、软件测试——边界值分析法
    vs2019+boost库(boost_1_67_0)安装
    现货白银的代码为什么不是ag
    【UniApp】-uni-app-处理项目输入数据(苹果计算器)
    8.论文学习Liver Tumor Segmentation and Classification: A Systematic Review
    pdf转换器哪个好用?这几款宝藏软件赶快用起来!
    定时备份mysql数据库
    9.3.4(数据链路层)
    Java进阶 之 再论面向对象(2)——类的定义及对象的使用 & 封装Encapsulation & 关键字private,this
  • 原文地址:https://blog.csdn.net/AsherGu/article/details/134481319