沈阳高端网站,商城网站数据库表关系设计,湖南如何做网络营销,广州联雅网络科技有限公司前言
Python从设计之初就已经是一门面向对象的语言#xff0c;正因为如此#xff0c;在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言#xff0c;那你可能需要先了解一些面向对象语言的一些基本…前言
Python从设计之初就已经是一门面向对象的语言正因为如此在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言那你可能需要先了解一些面向对象语言的一些基本特征在头脑里头形成一个基本的面向对象的概念这样有助于你更容易的学习Python的面向对象编程。 接下来我们先来简单的了解下面向对象的一些基本特征。
1. 面向对象技术简介
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类变量类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员类变量或者实例变量, 用于处理类及其实例对象的相关的数据。方法重写如果从父类继承的方法不能满足子类的需求可以对其进行改写这个过程叫方法的覆盖override也称为方法的重写。局部变量定义在方法中的变量只作用于当前实例的类。实例变量在类的声明中属性是用变量来表示的。这种变量就称为实例变量是在类声明的内部但是在类的其他成员方法之外声明的。继承即一个派生类derived class继承基类base class的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如有这样一个设计一个Dog类型的对象派生自Animal类这是模拟是一个is-a关系例图Dog是一个Animal。实例化创建一个类的实例类的具体对象。方法类中定义的函数。对象通过类定义的数据结构实例。对象包括两个数据成员类变量和实例变量和方法。
2. 创建类与实例化对象
使用 class 语句来创建一个新类class 之后为类的名称并以冒号结尾:
class Person:def say(self):print(Hello World) 类创建实例
class Person:username password def __init__(self,username,password):self.username usernameself.password passworddef getUsername(self):return self.usernamedef getPassword(self):return self.password user Person(admin,123456)
print(user.getUsername())
print(user.getPassword())
注意
1. 第一种方法__init__()方法是一种特殊的方法被称为类的构造函数或初始化方法当创建了这个类的实例时就会调用该方法
2. self 代表类的实例self 在定义类的方法时是必须有的虽然在调用时不必传入相应的参数。类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
3. 类的继承
面向对象的编程带来的主要好处之一是代码的重用实现这种重用的方法之一是通过继承机制。
通过继承创建的新类称为子类或派生类被继承的类称为基类、父类或超类。 语法 class 派生类名(基类名)1、如果在子类中需要父类的构造方法就需要显式的调用父类的构造方法或者不重写父类的构造方法。详细说明可查看 python 子类继承父类构造函数说明。
2、在调用基类的方法时需要加上基类的类名前缀且需要带上 self 参数变量。区别在于类中调用普通函数时并不需要带上 self 参数
3、Python 总是首先查找对应类型的方法如果它不能在派生类中找到对应的方法它才开始到基类中逐个查找。先在本类中查找调用的方法找不到才去基类中找。
class Person:username password def __init__(self,username,password):self.username usernameself.password passworddef getUsername(self):return self.usernamedef getPassword(self):return self.password class Admin(Person):isAdmin Truedef __init__(self,username,password,isAdmin):super().__init__(username,password)self.isAdmin isAdmindef printInfo(self):print(Username: self.username \nPassword: self.password \nAdmin: str(self.isAdmin))admin Admin(admin,123456,True)
admin2 Admin(user,123456,False)admin.printInfo()
admin2.printInfo()在子类中我们可以使用super()来调用父类中的构造函数、变量和方法
4. 类继承后方法的重写
如果你的父类方法的功能不能满足你的需求你可以在子类重写你父类的方法。
class Person:username password def __init__(self,username,password):self.username usernameself.password passworddef getUsername(self):return self.usernamedef getPassword(self):return self.password def printInfo(self):print(Username: self.username)print(Password: self.password) class Admin(Person):isAdmin Truedef __init__(self,username,password,isAdmin):super().__init__(username,password)self.isAdmin isAdmindef printInfo(self):print(Username: self.username \nPassword: self.password \nAdmin: str(self.isAdmin))user Person(user1,123456)
user.printInfo()admin Admin(admin,123456,True)
admin2 Admin(user,123456,False)admin.printInfo()
admin2.printInfo()
5. 类继承后方法的重载 6. 类的私有属性和方法
类的私有属性和私有方法类似于Java的private访问修饰符又有不同的地方。
类的私有属性
__private_attrs两个下划线开头声明该属性为私有不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
类的方法
在类的内部使用 def 关键字可以为类定义一个方法与一般函数定义不同类方法必须包含参数 self,且为第一个参数
类的私有方法
__private_method两个下划线开头声明该方法为私有方法不能在类的外部调用。在类的内部调用 self.__private_methods
class User:__username__passworddef __init__(self,username,password):self.__usernameusernameself.__passwordpassworddef getUsername(self):return self.__usernamedef setUsername(self,username):self.__usernameusernamedef getPassword(self):return self.__passworddef setPassword(self,password):self.__passwordpassworduser User(admin,123123)
print(user.getUsername())
user.setPassword(123456)
print(user.getPassword())
单下划线、双下划线、头尾双下划线说明 __foo__: 定义的是特殊方法一般是系统定义名字 类似 __init__() 之类的。 _foo: 以单下划线开头的表示的是 protected 类型的变量即保护类型只能允许其本身与子类进行访问不能用于 from module import * __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。