【Python简要笔记9】类

定义

在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 *
不建议使用这种方法,有可能会发生类同名的冲突,造成结果不一。

类编码风格

  1. 类名应该采用驼峰命名法。即将类名中的每个单词的首字母都大写,而不使用下划线。
    CatchData
  2. 实例名和模块名都应该采用小写格式,并在单词之间添加下划线。
    work_place
  3. 对于每一个类,都应该紧跟在类定义后面包含一个文档字符串。
    文档字符串要简述类的功能,并遵循编写函数的文档字符串时采用的格式约定。
    每个模块也应该包含一个文档字符串,并对其中的类的使用进行描述。
  4. 在类中可以使用一个空行来分隔方法。
  5. 在模块中可以使用两个空行来分隔类。
  6. 当同时导入标准库中的模块和自定义的模块时。
    先编写标准库中的import模块语句,然后添加一个空行,再添加自定义的import模块语句。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值