前端如何学习Python——类|七日打卡

710 阅读2分钟

创建类

由于我看的是《Python编程: 从入门到实践》这本书,所以我直接用书里的示例了。 创建一个 Dog

class Dog():
	"""初始化"""
	def __init__(self, name, age):
    	self.name = name
        self.age = age
    def sit(self):
    	"""模拟小狗坐下"""
    	print(self.name.title() + 'is now sitting')
    
    def roll_over(self):
    	"""模拟小狗翻滚"""
    	print(self.name.title() + 'rolled over')

Dog() 后的括号是继承类时用的,后面讲。""" 是文档注释,在前面几篇学习笔记里没提到过。

__init__方法

__init__ 相当于 js 中构造函数constructor。在上面的示例中,我们将方法__init__()定义成了包含三个形参:selfnameage。在这个方法的定义中,形参 self 必不可少,还必须位于其他形参的前面。为何必须在方法定义中包含形参 self 呢?因为Python调用这个 __init__() 方法来创建Dog实例时,将自动传入实参 self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。我们创建 Dog 实例时,Python将调用 Dog 类的方法__init__()。我们将通过实参向 Dog() 传递名字和年龄;self 会自动传递,因此我们不需要传递它。每当我们根据 Dog 类创建实例时,都只需给最后两个形参(name和age)提供值。

在Python 2.7中创建类

在Python 2.7中创建类时,需要做细微的修改——在括号内包含单词object:

class Dog(object):
	--snip--

根据类创建实例

class Dog():
	--snip--
my_dog = Dog('willie', 6)

Python 中新建实例没有 new 关键字。在命名上,我们通常可以认为首字母大写的名称(如Dog)指的是类,而小写的名称(如my_dog)指的是根据类创建的实例。

访问属性和调用属性

这里和 js 一样,都是使用.来访问或者调用

my_dog = Dog('willie', 6)
print(my_dog.name)
my_dog.sit()
my_dog.roll_over()
willie
Willie is now sitting
Willie rolled over

继承类

class Car():
	def __init__(self, year):
    	self.year = year;

class Bmw(Car):
	def __init__(self, year):
    	super().__init__(year)

对比下 js 的代码:

class Car {
	constructor(year) {
    	this.year = year;
    }
}

class Bmw extends Car {
	constructor(year) {
    	super(year)
    }
}

导入类

假如我现在把 CarDog 都写到 some.py 中,现在要在 main.py 中使用它们,该如何导入

导入单个类

from some import Car

导入多个类

from some import Car, Dog

导入所有类

from some import *

不推荐这个写法,内部的方法或者类名容易和当前模块冲突

导入整个模块

import some

给导入的模块起别名

模块名冲突的时候会用到这个

import some as CarAndDog