[A byte of Python] 学习笔记二

本文介绍了Python面向对象编程中的关键概念,包括类与对象、字段与方法、类变量与对象变量的区别,以及如何使用`__init__`方法初始化对象。重点探讨了继承的概念,解释了如何通过继承创建子类,并举例说明了基类和派生类的关系。
摘要由CSDN通过智能技术生成

目录

面向对象编程 Object Oriented Programming

继承 Inheritance


面向对象编程 Object Oriented Programming

类与对象是面向对象编程的两个主要方面。
一个类( Class) 能够创建一种新的类型( Type) , 其中对象( Object) 就是类的实例( Instance)

可以拥有类型 int 的变量, 也就是说存储整数的变量是 int 类的实例( 对象) 。

类的属性(Attribute):

1. 字段(Field):对象可以使用属于它的普通变量来存储数据。 这种从属于对象或类的变量叫作字段 。字段的两种类型为类变量与对象变量。

字段与普通变量:字段是绑定( Bound) 到类与对象的命名空间( Namespace)的普通变量。

类变量( Class Variable):被类中所有实例共享及访问,只存在一个副本,当任何一个对象对类变量作出改变时, 发生的变动将在其它所有实例中都会得到体现。

如下例中的population,需要用Sutdent.population进行引用。

对象变量( Object variable):由类的每一个独立的对象或实例所拥有,不被共享,每个对象都拥有从属的字段和副本,各不关联。

如下例中的name,需要用self.name进行引用。

class Student:
    population = 0
    def __init__(self, name):
        self.name = (name)
        print ('Here comes a student: {}'.format(self.name))
        Student.population += 1

    def graduate(self):
        print('{} graduates! Congratulations!'.format(self.name))
        Student.population -= 1
        if Student.population == 0:
            print('All students graduated!')
        else:
            print('We have {:d} students in our class.'.format(Student.population))

    @classmethod
    def how_many(cls):
        print('We have {:d} students in our class'. format(cls.population))

stu1 = Student('Sarah')
stu2 = Student('Sandra')
stu3 = Student('Sara')
Student.how_many()

stu1.graduate()
stu2.graduate()
stu3.graduate()
Here comes a student: Sarah
Here comes a student: Sandra
Here comes a student: Sara
We have 3 students in our class
Sarah graduates! Congratulations!
We have 2 students in our class.
Sandra graduates! Congratulations!
We have 1 students in our class.
Sara graduates! Congratulations!
All students graduated!

这里的how_many是一个classmethod修饰符对应的函数,该类函数调用时不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数。

2. 方法(Method):对象还可以使用属于类的函数来实现某些功能, 这种函数叫作类的方法。

类方法与普通函数:类方法必须多加一个参数在参数列表开头,  按照惯例, 它被赋予 self 这一名称。但调用时无需赋值。
 

class Person:
    def say_hi(self):
        print('Hello, how are you?')

p = Person()
p.say_hi()
# 前面两行同样可以写作
# Person().say_hi()
Hello, how are you?

__init__方法

在类的对象被实例化(创建)时立即运行,用于初始化对象。

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

    def say_hi(self):
        print('Hello, how are you?', self.name)

Person('Vio').say_hi()
Hello, how are you? Vio

继承 Inheritance

继承可在类之间实现类型与子类型的关系。

基类可作为公共类,使子类可从这个类中继承共有的特征, 也就是说他们将成为这一类型( 类) 的子类型, 而我们就可以向这些子类型中添加某些该类独有的特征。

为了使用继承,在定义类时需要在类后面跟一个包含基类名称的元组。

class Subclass(Superclass)

如下例中,SchoolMember 类会被称作基类( Base Class) 或是超类( Superclass) 。 Teacher 和 Student 类会被称作派生类( Derived Classes) 或是子类( Subclass)

class SchoolMember:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('Initialized SchoolMember: {}'.format(self.name))

    def tell(self):
        print('Name: "{}" Age: "{}"'.format(self.name, self.age), end=' ')

class Teacher(SchoolMember):
    def __init__(self, name, age, salary):
        SchoolMember.__init__(self, name, age)
        self.salary = salary
        print('Initialized Teacher: {}'.format(self.name))

    def tell(self):
        SchoolMember.tell(self)
        print('Salary: "{}"'.format(self.salary))

class Student(SchoolMember):
    def __init__(self, name, age, marks):
        SchoolMember.__init__(self, name, age)
        self.marks = marks
        print('Initialized Student: {}'.format(self.name))

    def tell(self):
        SchoolMember.tell(self)
        print('Marks: "{}"'.format(self.marks))

t = Teacher('Cecile', 30, 40000)
s = Student('Vio', 24, 100)

members = [t, s]

for member in members:
    member.tell()
Initialized SchoolMember: Cecile
Initialized Teacher: Cecile
Initialized SchoolMember: Vio
Initialized Student: Vio
Name: "Cecile" Age: "30" Salary: "40000"
Name: "Vio" Age: "24" Marks: "100"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值