定义
在Python中,首字母大写的名称指的是类。
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def speak_name(self):
print("Hello, I'm " + self.name)
def speak_age(self):
print("I'm " + self.age)
_init_
_init_()
是一个特殊方法,每当根据类创建新的实例时,Python都会自动运行这个方法。
_init_()
中的self
参数必须声明,必须位于其他形参前面。
当创建类实例时,将自动传入实参self,每个与类相关联的方法调用都自动传递实参self,self本事是一个指向实例本身的引用。可以通过self来访问类中的属性和方法。
访问属性
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def speak_name(self):
print("Hello, I'm " + self.name)
def speak_age(self):
print("I'm " + self.age)
student1 = Person("bob","12")
print(student1.name)
---ans---
bob
创建实例后,使用句点表示法来获取,类中定义的属性。
调用方法
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def speak_name(self):
print("Hello, I'm " + self.name)
def speak_age(self):
print("I'm " + self.age)
student1 = Person("bob","12")
student1.speak_name()
student1.speak_age()
---ans---
Hello, I'm bob
I'm 12
创建实例后,使用句点表示法来,调用类中定义的任何方法。
类和实例的使用
属性指定默认值
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
self.city = "beijing"
def speak_name(self):
print("Hello, I'm " + self.name)
def speak_age(self):
print("I'm " + self.age)
def introduce_self(self):
print("Hello! I'm "+ self.name + " I'm living in " + self.city)
student1 = Person("bob","12")
student1.introduce_self()
---ans---
Hello! I'm bob I'm living in beijing
类中的每个属性都必须有初始值。在类中可以对属性制定默认值。
修改属性的值
直接修改属性的值
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
self.city = "beijing"
def speak_name(self):
print("Hello, I'm " + self.name)
def speak_age(self):
print("I'm " + self.age)
def introduce_self(self):
print("Hello! I'm "+ self.name + " I'm living in " + self.city)
student1 = Person("bob","12")
student1.speak_age()
student1.age = "16"
student1.speak_age()
---ans---
I'm 12
I'm 16
直接通过实例访问类的属性,来修改属性的值。
通过方法来修改属性的值
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
self.city = "beijing"
def speak_name(self):
print("Hello, I'm " + self.name)
def speak_age(self):
print("I'm " + str(self.age))
def change_age(self):
self.age += 1
def change_name_age(self, _name):
self.name = _name
self.age += 1
student1 = Person("bob",12)
student1.speak_age()
student1.change_age()
student1.speak_age()
student1.change_name_age("lily")
student1.speak_name()
student1.speak_age()
---ans---
I'm 12
I'm 13
Hello, I'm lily
I'm 14
可以通过调用类中的方法,直接对类的属性进行修改等操作进行更改。
也可以通过类中的方法,传入具体参数,然后对类的属性进行更改。
继承
子类继承定义
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
self.city = "beijing"
def speak_name(self):
print("Hello, I'm " + self.name)
class Worker(Person):
def __init__(self,name,age):
super().__init__(name, age)
创建子类时,父类必须包含在当前文件中,且位于子类前面。
定义子类时,必须在括号内制定父类的名称。super()
是一个特殊的函数,通过super()
调用父类的所有属性,让子类实例包含父类的所有属性。
子类的属性与方法
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
self.city = "beijing"
def speak_name(self):
print("Hello, I'm " + self.name)
class Worker(Person):
def __init__(self,name,age):
super().__init__(name, age)
def location_name(self):
print(self.name + " works in " + self.workspace)
worker1 = Worker("bob", 30)
worker1.location_name()
---ans---
bob works in chang8
子类继承另一个类后,可在子类中添加新的属性和新的方法。
多态性-方法的复用
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
self.city = "beijing"
def speak_name(self):
print("Hello, I'm " + self.name)
class Worker(Person):
def __init__(self,name,age):
super().__init__(name, age)
def speak_name(self):
print(self.name + " works in " + self.workspace)
worker1 = Worker("bob", 30)
worker1.speak_name()
---ans---
bob works in chang8
当在子类中,复用父类的方法,Python只会调用子类中的方法。
类的实例作为属性
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
self.city = "beijing"
def speak_name(self):
print("Hello, I'm " + self.name)
class Company():
def __init__(self):
self.name = "Beijing No'1"
self.location = "Beijing Road 1"
def company_info(self):
print("company_name: " + self.name + "company_location: " + self.location)
class Worker(Person):
def __init__(self,name,age):
super().__init__(name, age)
self.workspace = "chang8"
self.company = Company()
def speak_name(self):
print(self.name + " works in " + self.workspace)
print("Company's name: " + self.company.name + " in " + self.company.location)
worker1 = Worker("bob", 30)
worker1.speak_name()
---ans---
bob works in chang8
Company's name: Beijing No'1 in Beijing Road 1
在子类中,添加一个之前定义的类,通过实例化该类对象。在后续使用过程中,通过句点表示法,对类的实例属性中的属性进行访问和操作。
导入类
这里直接列出来导入类的方式
导入单个类
将β类存储在一个名为A.py的模块中,使用β类时,引入A.py模块即可。
from β import A
导入多个类
一个模块中可以存储多个类。虽然同一个模块中的类之间应存在某种相关性, 但可根据需要在一个模块中存储任意数量的类。如从名为A.py的模块中,引入β,α类。
from A import β, α
导入整个模块
直接导入整个模块,再使用句点表示法访问需要的类。
import A
导入模块中的所有类
from A import *
不建议使用这种方法,有可能会发生类同名的冲突,造成结果不一。
类编码风格
- 类名应该采用驼峰命名法。即将类名中的每个单词的首字母都大写,而不使用下划线。
CatchData
- 实例名和模块名都应该采用小写格式,并在单词之间添加下划线。
work_place
- 对于每一个类,都应该紧跟在类定义后面包含一个文档字符串。
文档字符串要简述类的功能,并遵循编写函数的文档字符串时采用的格式约定。
每个模块也应该包含一个文档字符串,并对其中的类的使用进行描述。 - 在类中可以使用一个空行来分隔方法。
- 在模块中可以使用两个空行来分隔类。
- 当同时导入标准库中的模块和自定义的模块时。
先编写标准库中的import模块语句,然后添加一个空行,再添加自定义的import模块语句。