Python3面向对象

Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python面向对象编程。 如果你以前没有接触过面向对象编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python面向对象编程。 接下来我们先来简单的了解下面向对象的一些基本特征。 面向对象... 阅读详情

一、面向对象技术简介

1、面向对象简介

面向对象编程(Object Oriented Programing,OOP)是一种编程思想,OOP把对象当成程序的一个基本单元,一个对象包含数据和操作数据的方法。面向对象编程的三大特性如下:
A、封装,可以隐藏实现细节,使代码模块化。
B、继承,可以通过扩展已存在的类来实现代码重用,避免重复编写相同的代码。
C、多态,封装和继承的目的都是为了实现代码重用, 而多态是为了实现接口重用,使得类在继承和派生的时候能够保证任何一个类的实例都能正确调用约定好的属性和方法。
面向对象编程通过封装、继承、多态实现了软件工程的重用性、灵活性、扩展性三个目标。

2、面向对象术语

类(Class)是用来描述具有相同的属性和方法的对象的集合,定义了集合中每个对象所共有的属性和方法。
对象是类的实例,Python中对象包括两个数据成员(类变量和实例变量)和方法。
方法是类中定义的函数。
类变量在类的所有实例化对象中是公用的。类变量定义在类中且在函数体外。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行重写(override)。
继承是一个派生类(derived class)继承基类(base class)的字段和方法。继承允许把一个派生类的对象作为一个基类对象对待。
实例化:创建一个类的实例,类的具体对象。

3、对象的属性

在python当中一切皆对象,每个对象都有三个属性:id、类型type和数值。id是对象的地址,id相同则必为同一对象,不同对象的值可以相同。

在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
# -*- coding:utf-8 -*-
x = 10
print(id(x))
print(type(x))  # <class 'int'>
print(x)

y = 10
print(id(y))
print(type(y))  # <class 'int'>
print(y)

print(x is y)  # True

二、类的定义

1、类的定义

类是一种抽象数据类型,是对现实世界的一类数据及其操作的封装。
类定义语法格式如下:

class ClassName:
    <statement-1>
    .
    .
    .
    <statement-N>

类实例化后,可以使用其属性,创建一个类后,可以通过类名访问其类属性。
Person类有以下3个属性:
nationality:国籍
name:姓名
id:×××号码

import uuid

class Person:
    nationality = "China"

    def __init__(self, name):
        self.name = name
        self.__id = str(uuid.uuid1())

    def hello(self):
        print("Hello, I am %s, I come from %s, My ID is %s" %(self.name, self.nationality, self.__id))

所有人的国籍基本都是相同的,且允许直接通过类或实例来访问,允许随意修改。
大部分人的姓名是不同的,且允许直接通过类的实例来访问和随意修改。
所有人的×××号码都是不一样的,且不允许直接通过类或实例来访问或随意修改。

2、类的实例化

import Person

bauer = Person.Person("Bauer")
bauer.hello()

3、类成员的可见性

Python中默认所有的成员都是公有成员,但私有成员是以两个下划线开头的名字表示私有成员,私有成员不允许直接访问,只能通过内部方法进行访问,私有成员也不允许被继承。
Python中通过在类变量、实例变量、类方法、实例方法前加__前缀,可以将其对外进行隐藏,变为类的私有变量或函数。由于Python中内置变量或函数使用__前后缀,因此,不推荐私有的变量或函数加__前后缀,只加__前缀。
Python作为动态语言,允许类或实例动态增加属性,与类内部的私有的属性并不相同。
Python类维护了一个用于保存类的数据的字典,字典内部Python将私有成员改名为_ClassName + __variable_name,因此在类外通过访问私有变量新的名称可以访问相应的私有变量。

在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
import uuid

class Person(object):
    nationality = "China"

    def __init__(self, name):
        self.name = name
        self.__id = str(uuid.uuid1())

    def hello(self):
        print("Hello, I am %s, I come from %s, My ID is %s" %(self.name, self.nationality, self.__id))

if __name__ == "__main__":
    bauer = Person("Bauer")
    print(bauer.__dict__)
    print(bauer._Person__id)

"""
output:
{'name': 'Bauer', '_Person__id': 'ed496846-94c7-11e9-80c4-5ce0c5e8bcf0'}
ed496846-94c7-11e9-80c4-5ce0c5e8bcf0
"""

三、类的属性

1、类属性

直接定义在class下的属性是公有属性/类属性,类属性是类的所有实例对象共同所有的,因此默认情况下类属性值只会保留一份,而不会为类的每个实例都保存一份。
类属性可以使用ClassName.VariableName访问,在实例方法内部也可以使用self.__class__.VariableName进行访问。

import uuid

class Person(object):
    nationality = "China"

    def __init__(self, name):
        self.name = name
        self.__id = str(uuid.uuid1())

    def hello(self):
        print("Hello, I am %s, I come from %s, My ID is %s" %(self.name, self.nationality, self.__id))

    def sayHello(self):
        print("Hello,I come from %s" % self.__class__.nationality)

if __name__ == "__main__":
    bauer = Person("Bauer")
    bauer.sayHello()
    jack = Person("Jack")
    print(Person.nationality, bauer.nationality, jack.nationality)
    bauer.nationality = "USA"
    print(Person.nationality, bauer.nationality, jack.nationality)
    Person.nationality = "Germany"
    print(Person.nationality, bauer.nationality, jack.nationality)

"""
output:
Hello,I come from China
China China China
China USA China
Germany USA Germany
"""

类属性可以通过类直接访问,也可以直接通过实例进行访问; 如果通过类的某个实例对类属性进行修改,本质上是为该实例添加了一个与类属性名称相同的实例属性,对真正的类属性没有影响,因此不会影响其它实例获取类属性的值; 通过类对类属性进行修改,必然会改变类属性的值,对类的所有实例是都有影响的。

2、实例属性

实例属性又称成员属性或成员变量,是类的每个实例对象单独持有的属性。实例属性必须在类的init方法中进行声明。

在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
import uuid

class Person(object):
    nationality = "China"

    def __init__(self, name):
        self.name = name
        self.__id = str(uuid.uuid1())

    def hello(self):
        print("Hello, I am %s, I come from %s, My ID is %s" %(self.name, self.nationality, self.__id))

if __name__ == "__main__":
    bauer = Person("Bauer")
    jack = Person("Jack")
    print(bauer.name, jack.name)
    bauer.name = "Jack Bauer"
    jack.name = "Chen Jack"
    print(bauer.name, jack.name)
    #print(Person.name)  ## AttributeError: type object 'Person' has no attribute 'name'

"""
output:
Bauer Jack
Jack Bauer Chen Jack
"""

通过类访问成员属性会报错:
print(Person.name)
实例属性可以直接通过实例对象来访问和更改,是每个实例对象独有的,某个实例对象的实例属性被更改不会影响其它实例对象的相同属性的值。实例属性的值不能通过类来访问和修改。
Python作为动态语言,可以在类外部动态增加实例对象的属性。

3、私有属性

私有属性和实例属性必须在__init__方法中进行声明,但私有属性的属性名需要以双下划线__开头,比如Person中的__id属性。私有属性是一种特殊的实例属性,只允许在实例对象的内部(成员方法或私有方法中)访问,而不允许在实例对象的外部通过实例对象或类来直接访问,也不能被子类继承。

import uuid

class Person(object):
    nationality = "China"

    def __init__(self, name):
        self.name = name
        self.__id = str(uuid.uuid1())

    def hello(self):
        print("Hello, I am %s, I come from %s, My ID is %s" %(self.name, self.nationality, self.__id))

if __name__ == "__main__":
    bauer = Person("Bauer")
    bauer.hello()
    # print(bauer.__id) # AttributeError: 'Person' object has no attribute '__id'
    # print(Person.__id) # AttributeError: type object 'Person' has no attribute '__id'

"""
output:
Hello, I am Bauer, I come from China, My ID is c0c02dcc-94aa-11e9-972c-5ce0c5e8bcf0
"""
Python3 面向对象 | 菜鸟教程(十六) 类(Class)用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。语法格式如下:类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。如下实例化类 MyClass,对应的 __init__() 方法就会被调用:子类(派生类 DerivedClassName)会继承父类(基类 BaseClassName)的属性和方法。BaseClassName(实例中的基类名)必须与派生类定义在一个作用域内。 阅读详情

相关推荐

Python3面向对象中property用法

Python中,@property是一个内置装饰器,用于创建只读属性(read-only attribute)的一个简便方法。通过使用property装饰器,可以将类中的方法转换为与属性相同的方式访问,有助于实现数据封装和数据隐藏。roperty() 也用于创建属性,也可以用类中的方法来控制对某个实例属性的访问、设置、删除等操作,但它们在使用方式上有所不同。

weixin_42098295的博客 1232

Python3快速入门(六)——Python3面向对象

Python3快速入门(六)——Python3面向对象 一、面向对象技术简介 1、面向对象简介 面向对象编程(Object Oriented Programing,OOP)是一种编程思想,OOP把对象当成程序的一个基本单元,一个对象包含数据和操作数据的方法。面向对象编程的三大特性如下:A、封装,可以隐藏实现细节,使代码模块化。B、继承,可以通过扩展已存在的类来实现代码重用,避免重复编写相同的代码。...

cdqvkn73338的博客 564

python2和python3面向对象的区别

python 面向对象: node2:/root/python/20200729#cat t5.py # !/usr/bin/env python # -*- coding: utf-8 -*- class player(): ##定义一个类 def print_role(self): ##定义一个实例方法 return 'aaaaaaaa' print(type(player)) print(dir(player)) user1=player() ##类的实例化 print.

zhaoyangjian724的专栏 277

Python3 面向对象编程

Python3 面向对象编程

pku_langzi的博客 876

java-泛型-1

/`` package 泛型; /** 1.限制使用的类型 2.和object对比:object在代码的过程中不会报错,但是。运行错误。 泛型解决了这个问题 泛型前后必须一样,后面可以不写 3.泛型可以不写,默认object 1.申明: 类名 <类型参数1,2,3>,泛型通常是用大写字母T 等 2.泛型,要是在实例化对象的时候就指定类型 @author 小虎牙 */ public class fanxing { public T name; public static void main

huiguo_的博客 248

3.9 Python3 面向对象

本文详细介绍了Python面向对象编程的核心概念和应用。主要内容包括:1)面向对象基本概念(类、对象、封装、继承、多态)及其优势;2)Python类的定义(构造函数、类属性、实例属性、访问控制);3)类方法类型(实例方法、类方法、静态方法)和特殊方法;4)继承机制(单继承、方法重写、MRO顺序)和多继承问题;5)类属性和方法的进阶使用(属性装饰器、描述符协议)。文章通过丰富的代码示例展示了Python面向对象编程的特性,包括动态属性、方法重载、抽象基类等高级特性,是一份全面的Python OOP实践指南。

weixin_40978412的博客 1894

python3 面向对象_Python3 面向对象概述

笔记内容:Python3 面向对象笔记日期:2017-11-13Python3 面向对象Python3 面向对象面向对象技术简介类的定义类的对象类的方法继承多继承方法重写类的私有属性与私有方法Python3 面向对象Python从设计之初就已经是一门面向对象的语言,所以我们可以以面向对象的方式去编写python代码。面向对象就是将任何事情都当做对象去看待,一个对象会拥有属性和行为。在面向对象的语言...

weixin_39959369的博客 137

python3面向对象_Python3面向对象编程

Python3面向对象编程编辑锁定讨论上传视频《Python3面向对象编程》是2015年6月电子工业出版社出版的图书,作者是肖鹏,常贺,石琳。书名Python3面向对象编程作者肖鹏,常贺,石琳ISBN9787121262463出版社电子工业出版社出版时间2015年6月页数380字数478千字开本16(185*235)版次01-01Python3面向对...

weixin_39737368的博客 251

Python入门:Python3 面向对象全面学习教程

Python入门:Python3 面向对象全面学习教程,本文全面解析Python3面向对象编程,涵盖核心概念、语法与技巧。先介绍类、对象、方法、继承等基础概念,再讲解类的定义与实例化,包括构造方法__init__()及self的作用。还阐述了类的属性(类变量、实例变量、私有属性)和方法(实例方法、私有方法),详解继承机制(单继承、多继承)、方法重写与super()函数,以及类的专有方法与运算符重载,帮助读者掌握这一编程范式,提升代码质量与开发效率。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 21万+

Python3编程之面向对象

class Car:pass#推荐使用下面定义方式passpass。

2503_92914039的博客 813

python3面向对象编程思想_Python3 面向对象

Python3 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python面向对象编程。如果你以前没有接触过面向对象编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python面向对象编程。接下来我们先来简单的了解下面向对象的一些...

weixin_39982017的博客 101

python3面向对象

类是面向对象编程中的核心概念,它是对象的模板或蓝图,描述了一组具有相同特征的对象。类定义了对象的状态(属性)和行为(方法)。语法:声明1声明2...声明n对象是类的实例,通过调用类的构造函数(init())来创建对象。创建实例:通过对类的实例化从而实现创建实例。

ZZH1120KQ的博客 1139

python 完全面向对象_Python3 面向对象

Python3 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python面向对象编程。如果你以前没有接触过面向对象编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python面向对象编程。接下来我们先来简单的了解下面向对象的一些...

weixin_39882589的博客 72
上一篇: Python3函数
下一篇: Python3正则表达式
Python老王
博客等级 码龄7年 159粉丝 224原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值