Python入坑笔记(六):类
类的创建和使用
创建类
举个栗子:
class Dog():
def __init__(self, name, age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗蹲下"""
print(self.name.title() + " is now sitting.")
def roll(self):
"""模拟小狗打滚"""
print(self.name.title() + " rolled over!")
#创建实例
my_dog = Dog("Whillie", 6)
print("My dog's name is " + my_dog.name.title())
print("My dog is " + str(my_dog.age) + " years old")
my_dog.roll()
以上创建了一个Dog类(类名首字母大写),类属性有name和age,类方法有sit()和roll()。
- 方法
__init__()是一个特殊的方法,类似于Java中的构造函数,每当根据Dog类创建新实例时,Python都会自动运行它,做一些初始化操作。 - 参数
self在__init__()方法中必不可少且在所有形参之前,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。self在创建实例时自动传递,不需要手动传递实参。 - 在类中使用
self.name这种方式访问类属性或方法。在类外则用实例名访问或调用,如my_dog.name。
在Python2.7中创建类
Python2.7中创建类时需要细微的修改,在类名括号中包含单词object:
class ClassName(object)
--snip--
创建类实例
根据上面的Dog类,下面创建一个特定小狗的实例:
my_dog = Dog('Tom', 6)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + "years old.")
可以看到,创建实例时,直接使用类名并传入参数即可,不用像Java那样使用new关键字。要访问实例的属性,使用句点表示法,比如访问my_dog的name属性的值:
my_dog.name
在Dog类中引用该属性时,用的是self.name。
title()方法将属性
name的值改为首字母大写
在创建好类的实例后,就可以用句点表示法来调用类中定义的方法,比如:
my_dog.rit()
修改属性的值
通过句点表示法可以访问类中的属性值,同样也可以修改属性的值:
my_dog = Dog('Tom', 10)
my_dog.name = 'Jerry'
还可以通过定义类中的方法修改属性的值:
class Dog():
--snip--
def change_name(self, new_name):
self.name = new_name
类的继承
子类的定义和使用
首先定义一个父类:
"""父类"""
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(self):
print(self.name.title() + " rolled over!")
然后定义一个继承于该父类的子类:
"""子类"""
class Corgi(Dog):
def __init__(self, name, age, color):
super().__init__(name, age)
self.color = color
在创建子类时,父类必须包含在当前文件中,并且位于子类之前。在定义子类时,将父类的名称指定在类括号中。super()方法将父类和子类关联起来。
Python2.7中的继承
class Corgi(Dog):
def __init__(self, name, age, color):
super(Corgi, self).__init__(name, age)
self.color = color
super()函数需要两个实参:子类名和对象self。
尝试创建一个子类实例并调用:
corgi = Corgi('Tom', 10, 'brown')
corgi.sit()
output:
Tom is now sitting.
如果父类方法不适用于子类,可以在子类中对该方法进行重写。