Python学习笔记——类的创建和调用

目录

  • 1.对象与类
    • 对象
  • 2.类的创建和调用
    • 类的创建
    • 类的调用
  • 3.创建类的两个关键点
    • 特殊参数:self
    • 特殊方法:初始化方法

1.对象与类

对象

对象,是一个抽象概念,英文称作“Object”,表示任何存在的事物。时间万物皆对象。在现实世界中,随处可见的一个事物就是对象,对象是事物存在的实体,就如一个人。
通常将对象划分为两部分,即静态部分和动态部分。静态部分被称为“属性”,任何对象都有具备自身的属性,这些属性不仅是客观存在的,而且是不能忽视的,就如人的性别;动态的属性部分指的是对象的行为,即对象执行的动作,就如人可以行走。

一言以蔽之:Python中的对象等于类和实例的集合:即类可以看作是对象,实例也可以看作是对象,比如列表list是个类对象,[1,2]是个实例对象,它们都是对象。
在Python中,一切都是对象,在Python中有这么一句话:万事万物,皆为对象

生活中我们所说的类,是物以类聚的类,是分门别类的类,是多个类似事物组成的群体的统称。类的概念能帮助我们快速理解和判断事物的性质。
同样在编程世界里,其实我们从第一天开始就在接触类(class),比如整数、字符串、浮点数等,不同的数据类型就属于不同的类。
准确来说,它们的全名是整数类、字符串类、浮点数类,我们可以用type()函数来验证一下:

代码如下(示例):

print(type('8')) # '8'属于字符串类'str'
print(type(8))  # 8属于整数类'int'
print(type([8])) # [8]属于列表类'list'

运行结果如下:
<clase 'str'>
<clase 'int'>
<clase 'list'>

2.类的创建和调用

类的创建

区别于其他类的依据,细分的话其实可以分成两种。
第一种是描述事物是怎样的,有什么特征,比如黑眼睛、黄皮肤。
第二种是描述事物能做什么,有哪些行为和作用,比如能用筷子吃饭、会讲汉语。
第一种共同点叫作属性(即what),第二种叫作方法(即how)。

代码如下(示例1):

class Computer:                  # 类的创建:class + 类名 + 冒号,后面的语句要缩进
    screen = True                # 类的属性创建:通过赋值语句(即定义“是怎么样”)
    def start(self):             # 实例方法的创建:def + 方法名(self)
        print('电脑正在开机中……') # 方法具体执行的过程,既定义“能做什么”

代码如下(示例2):

# 类名首字母大写
class Chinese:
    # 用赋值语句,创建类的属性
    eye = 'black'

    # 创建实例方法时,不要漏了 self
    def eat(self):
        print('吃饭,选择用筷子。')

类的调用

代码如下(示例1):

class Computer:
    screen = True

    def start(self):
        print('电脑正在开机中……')

my_computer = Computer()
print(my_computer.screen)
my_computer.start()
# my_computer = Computer()。这个过程叫作:类的实例化,即在某个类下创建一个实例对象。

运行结果如下:
True
电脑正在开机中……

my_computer = Computer()。这个过程叫作:类的实例化,即在某个类下创建一个实例对象。当实例my_computer一被创建出来,就可以调用类中的属性和方法。
调用的语法是实例名.属性和实例名.方法。

代码如下(示例2):

# 可以在刚刚创建的Chinese类基础上调用
# 类名首字母大写
class Chinese:                        #类的创建:class+类名+冒号,后面语句要缩进
    # 用赋值语句,创建类的属性
    eye = '黑色'                      #类的属性创建:通过赋值语句(即定义”是怎样的“)

    # 创建实例方法时,不要漏了 self
    def eat(self):                   #实例的创建:def + 方法名(self):
        print('吃饭,选择用筷子。')    #方法具体的执行过程,即定义”能做什么“

#注
#1、在类中赋值的变量叫做属性,类中定义的函数叫做方法(以此和普通函数区分)
#2、实例方法是指类中参数带 self 的函数,是类方法的一种形式,也是最常用的用法。

my_Chinese =  Chinese()   #实例名 = 类名()
print(my_Chinese.eye)     #实例名.属性   获取到类属性
my_Chinese.eat()          #实例名.方法 

类中创建的属性和方法可以被其所有的实例调用,而且,实例的数目在理论上是无限的。我们可以同时“新建”多个实例。

代码如下(示例3):

class Chinese:
    eye = 'black'

    def eat(self):
        print('吃饭,选择用筷子。')

# 类的实例化:创建多个实例
xiaohan = Chinese()
xiaoming = Chinese()
xiaohong = Chinese()

print(xiaoming.eye)
xiaohan.eat()
xiaohong.eat()

运行结果如下:
black
吃饭,选择用筷子。
吃饭,选择用筷子。

因此,类也被称为“实例工厂”,因其为所有实例提供了一套蓝图(即预先设定好有什么属性和方法)。

3.创建类的两个关键点

特殊参数:self

特殊参数self的作用:self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行。

代码如下(示例1):

class Chinese:

    name = '晓寒'  # 类属性name

    def say(self, someone):  # 带有两个参数的方法
        print(someone + '是中国人!')

person = Chinese()
print(person.name)
person.say('晓寒') 
# self调用时要忽略,'晓寒'传给参数someone

结果运行如下:
晓寒
晓寒是中国人!

这样写虽然没错,但实际上是多此一举,因为只要在say方法内部调用类属性’晓寒’,就可以实现同样的功能,不必重复传参。在类的内部调用类属性,而实例又还没创建之前,我们就需要有个变量先代替实例接收数据,这个变量就是参数self。

代码如下(示例2):

class Chinese:

    name = '晓寒'  # 类属性name

    def say(self):     
        print(self.name + '是中国人!')

person = Chinese()   # 创建Chinese的实例person
person.say()         # 调用实例方法

结果运行如下:
晓寒是中国人!

self的作用相当于先给实例占了个位置,等到实例创建好就“功成身退,退位让贤”。同理,如果想在类的方法内部调用其他方法时,我们也需要用到self来代表实例。

代码如下(示例3):

class Chinese:
    
    name = '晓寒'  # 类属性name
    
    def nation(self):
        print(self.name + '是中国人!')

    def say(self):
        self.nation() 
        print('我来自南平松溪县。')

person = Chinese()
# 创建实例person
person.nation()
person.say()
# 调用say()方法

结果运行如下:
晓寒是中国人!
晓寒是中国人!
我来自南平松溪县。

当最后一行实例person调用say()方法时,便会执行say()内部的语句。此时self.nation()就变成person.nation(),也就是调用实例方法nation(),打印出’晓寒是中国人!‘,再打印出’我来自南平松溪县。’。综上,所以我们说self代表的是类的实例本身,方便数据的流转。对此,我们需要记住两点:
第一点:只要在类中用def创建方法时,就必须把第一个参数位置留给 self,并在调用方法时忽略它(不用给self传参)。
第二点:当在类的方法内部想调用类属性或其他方法时,就要采用self.属性名或self.方法名的格式。

特殊方法:初始化方法

定义初始化方法的格式是def init(self),是由init加左右两边的【双】下划线组成( initialize “初始化”的缩写)。初始化方法的作用在于:当每个实例对象创建时,该方法内的代码无须调用就会自动运行。

代码如下(示例1):

class Chinese:

    def __init__(self): 
        print('很高兴遇见你,我是中国人!')

person = Chinese()

结果运行如下:
很高兴遇见你,我是中国人!

利用这个特性,在编写习惯上,我们会在初始化方法内部完成类属性的创建,为类属性设置初始值,这样类中的其他方法就能直接、随时调用。我们来看个例子:

代码如下(示例2):

class Chinese:
    def __init__ (self):
        self.mouth = 1  # self.不能丢
        self.eye = 2
    
    def body(self):
        print('我有%s张嘴巴' % self.mouth)
        print('我有%s只眼睛' % self.eye)

person = Chinese()
person.body()

结果运行如下:
我有1张嘴巴
我有2只眼睛

除了设置固定常量,初始化方法同样可以接收其他参数,让传入的这些数据能作为属性在类的方法之间流转。我们再来看个例子:

代码如下(示例3):

class Chinese:

    def __init__(self, name, birth, region):
        self.name = name   # self.name = '晓寒' 
        self.birth = birth  # self.birth = '南平松溪'
        self.region = region  # self.region = '厦门'

    def born(self):
        print(self.name + '出生在' + self.birth)

    def live(self):
        print(self.name + '居住在' + self.region)    

person = Chinese('晓寒','南平松溪','厦门') # 传入初始化方法的参数
person.born()
person.live()

结果运行如下:
晓寒出生在南平松溪
晓寒居住在厦门

当初始化方法有多个参数的时候,在实例化的时候就要传入相应的值,这里晓寒’传给参数name, '南平松溪’传给birth,'厦门’传给region。当实例person创建完成后,初始化方法会自动执行,此时第三行的self.name = name就等价于self.name = ‘晓寒’,以此类推(self.name中的name可以换成其他名称,看个人的习惯)。如此一来,类的其他方法就能通过self.属性名的形式调用传入的数据了。

你可能感兴趣的:(学习笔记,python)