类
创建类
由于我看的是《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__()定义成了包含三个形参:self
、name
和 age
。在这个方法的定义中,形参 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)
}
}
导入类
假如我现在把 Car
和 Dog
都写到 some.py
中,现在要在 main.py
中使用它们,该如何导入
导入单个类
from some import Car
导入多个类
from some import Car, Dog
导入所有类
from some import *
不推荐这个写法,内部的方法或者类名容易和当前模块冲突
导入整个模块
import some
给导入的模块起别名
模块名冲突的时候会用到这个
import some as CarAndDog