python3xiaobaike_2020/chapter7/7-2 python3小白课:定义类和实例化对象.md
2025-04-20 23:22:14 +08:00

58 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# python3小白课定义类和实例化对象
搞懂面向对象之后我们来开始讲python中的类如何定义首先我们需要先定义类才能通过类来实例化对象。
在python中定义类的语法如下
```python
class 类名:
执行语句类变量类方法等
```
我们可以看到,定义一个类的关键字为`class`,类名的命令跟之前变量命名差不多,但一般约定俗成,类名是一个或多个有意义的单词连缀而成的,中间没有分隔符,每个单词的首字母大写,其他字母全部小写,比如`XiaoBai`
类之内可以写一些执行语句、定义变量、定义方法(需要注意该缩进的地方缩进),定义方法使用的也是`def`关键字,跟平时定义一个函数差不多,但形参定义时有一点小小的不同,这个后面会讲解。
如果类中没有任何内容,或者暂时不添加代码内容,你可以使用`pass`关键字来先占位。
我们来看一个小例子来讲解细节:
```python
# coding:utf-8
class Student:
"""这个地方可以定义类的帮助文档"""
# 定义类变量
sex = "男男男"
# 定义构造函数
def __init__(self, name, age=18, sex="男"):
# 实例的变量,区别于类变量
self.name = name
self.age = age
self.sex = sex
# 定义一个其他方法
def info(self):
print(Student.sex)
print("姓名:{},年龄:{},性别:{}".format(self.name, self.age, self.sex))
# 查看帮助文档
help(Student)
# 实例化对象
s = Student("小白", 19)
s.info()
print(s.name, s.age, s.sex)
# 可以赋值
s.name = "小黑"
s.info()
# 调用类变量需要加上类名
print(Student.sex)
```
* 首先我们使用了class关键字定义了一个`Student`类,里面可以定义类帮助文档、类变量和方法,我们可以发现,定义的类变量在调用的时候需要加上类名。
* 类中一般会定义一个`__init__`的构造函数它也是python系统中内置的特殊方法。这个函数在实例化对象的时候会自动调用通常一个类会包含这个函数并且会在这个函数中初始化一些实例变量。首先我们可以注意到每一个方法的第一个形参都是`self`,即使在没有参数应传入的方法中也是如此,这是类的方法跟普通函数的定义的不同之处。为什么要这样呢?类的方法一般会通过实例化后的对象进行调用,`self`表示调用它的对象本身,调用方法时对象会自动绑定到第一个形参中去,调用时从第二个形参开始传递参数即可。这是约定俗成的,你记住就行,更深入的探究可以结合后面的课程或者查阅资料来理解。
> [!tip]
>
> 实际也不一定要用`self`可以用别的,在类中统一即可,但约定俗称用`self`这样具有最好的可读性在某些IDE中也能自动进行处理。
* 我们需要注意,实例变量跟类变量是不同的。所以`self.sex``sex`是不同的,类变量一般在方法之外定义,一般来讲不同的实例会共用一份,可在外部赋值修改,使用类名来调用它,如`Student.sex`,直接用`sex`不行。而实例变量的话是像`self.sex`这样的,一般在构造函数中创建。我们可以创建多个实例,每个实例都可以设定自己的`sex`值。调用时使用`实例名.sex`调用,比如我们的实例名为`s`,那就是`s.sex`即可。如果有需要,我们也可以在外部代码添加实例变量,比如在外部代码中增加一句`s.nickname = "小白白"`,这样这个实例就多了一个新的实例变量了。
* 在实例化对象的时候,我们可以自行设定一个实例名(变量),初始化之后,就可以使用该实例名来调用该实例下的实例变量和方法了。比如这里我们使用`s`作为实例名。创建实例之后,我们可以给取现有的实例变量的值,也可以赋值。甚至还可以定义新的实例变量,但使用范围仅限于该实例。