ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

10-python面向对象的编程(OOP)

2021-08-04 13:34:24  阅读:174  来源: 互联网

标签:10 python money self Person OOP print xiaoxu 属性


Python面向对象的编程

  • 面向对象的程序设计(Onject-oriented programming,OOP)
  • 面向过程的程序设计(Process-oriented programming,POP)

1. 1 对象(Object):将属性和方法封装在一起

请添加图片描述请添加图片描述

1.2 类(class):具有相同的属性和方法的对象集合。

  • 对象是类的实例
  • 子类继承了父类的全部属性和方法,并且也有自己特有的属性和方法
  • 继承描述了类之间的层次关系
  • 类和对象并非仅限于具体的事物,它也可以是一种抽象的概念或者规则请添加图片描述

1.3 类属性

  • 类属性是类中所有对象共同拥有的属性
  • 它在内存中只存在一个副本
  • 可以通过类名访问,也可以被类的所有对象访问
  • 在类定义之后,可以通过类名添加类属性,新增的类属性也被类和所有对象共有
    请添加图片描述

1.4 声明类

  • 请添加图片描述

  • 方法中必须有一个参数self,而且它是参数列表中的第一个参数

  • 由同一个类可以生成很多个对象,每一个对象,都有一个专属的self,代表这个对象自身

class Person():
    money=10086
    def say_hello(self):
        print("hello!")

1.5 创建对象

对象名 = 类名()

class Person():
    money=200000000
    def say_good(self):
        print("Good Luck!")

xiaoxu = Person()

print(xiaoxu.money)
xiaoxu.say_good()

运行结果:

PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person.py"
200000000
Good Luck!
  • 创建对象之后,动态添加对象属性
class Person():
    money=200000000
    def say_good(self):
        print("Good Luck!")

xiaoxu = Person()

#创建对象之后,动态添加对象属性
xiaoxu.major="computer"
print("xiaoxu’s major is",xiaoxu.major)

运行结果:

PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person2.py"
xiaoxu’s major is computer

该动态添加的实例属性,它只属于xiaoxu自己,如果重新创建其他的Person()对象,是没有这个属性的。

例如在以上的代码前提下,在末尾添加上这两行代码再次进行测试:

laowang = Person()
print(laowang.major)

运行结果:

PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person3.py"
xiaoxu’s major is computer
Traceback (most recent call last):
  File "g:\Codes\PyStudy\02\Person3.py", line 17, in <module>
    print(laowang.major)
AttributeError: 'Person' object has no attribute 'major'

1.6 测试类属性特性

  • 类属性,所有的实例共同享有
  • 修改类属性,所有实例的值都会发生变化
  • 某一对象,自行修改类属性,那么其他对象无法获取该类属性的值
class Person():
    # 类属性,所有的示例共同享有
    money=200000000
    def say_good(self):
        print("Good Luck!")

xiaoxu = Person()
laowang = Person()

print(Person.money)
print(xiaoxu.money)
print(laowang.money)
print("------------分割线-------------")

# 修改类属性,所有实例的值都会发生变化
Person.money=400000

print(Person.money)
print(xiaoxu.money)
print(laowang.money)
print("------------分割线-------------")

# 小徐自行创建的实例属性,它就不会被共享
xiaoxu.money=1200000

print(Person.money)
print(xiaoxu.money)
print(laowang.money)

1.7 删除对象

del 对象名

  • 在执行完这条语句后,该对象就不存在了,如果再访问该对象,就会出现错误提示
class Person():
    money=1200000
    def say_good(self):
        print("Good Luck!")

xiaoxu = Person()
xiaoxu.major="computer"
print("xiaoxu’s major is",xiaoxu.major)

del xiaoxu
print(xiaoxu.major)

执行结果:

PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person5.py"
xiaoxu’s major is computer
Traceback (most recent call last):
  File "g:\Codes\PyStudy\02\Person5.py", line 11, in <module>
    print(xiaoxu.major)
NameError: name 'xiaoxu' is not defined

1.8 构造函数和析构函数

  • 构造函数:再创建对象时,用来完成初始化操作
    • init(self,参数2,参数3,…)
    • 当创建对象时,系统会自动调用构造函数。
    • 可以把对成员变量赋初值的语句写在构造函数中,从而保证每个变量都有合适的初始值。
  • 析构函数:在清除对象时,回收和释放对象所占用的资源。
    • del()
  • 在Python中,构造函数和析构函数可省略
class Person:
    # 构造函数 -- __init__()
    # 在创建对象时,用来完成初始化操作
    def __init__(self,name,age,gender="男"):
        self.name=name
        self.age=age
        self.gender=gender
    # 析构函数 -- __del__()
    # 在清除对象时,回收和释放对象所占用的资源
    def __del__(self):
        print("Bye bye - from",self.name)
    def printInfo(self):
        print("姓名:",self.name,"年龄:",self.age,"性别:",self.gender)

xiaoxu=Person("小徐",21)
xiaofang=Person("小芳",18,"女")

xiaoxu.printInfo()
xiaofang.printInfo()

del xiaoxu
del xiaofang

运行结果:

PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person6.py"
姓名: 小徐 年龄: 21 性别: 男
姓名: 小芳 年龄: 18 性别: 女
Bye bye - from 小徐
Bye bye - from 小芳

1.9 静态方法和类方法

请添加图片描述

"""
类方法:
    可以通过类名或对象名调用。
     不能访问实例属性,但可以访问类属性。
静态方法:
    可以通过类名或对象名调用。
    不能访问实例属性,也不能直接访问类属性。
    但是可以通过类名引用类属性。
"""
class Person():
    @classmethod
    def eat(self,name):
        self.name = name
        print("吃了两碗米饭的",self.name)
    @staticmethod
    def drink():
        print("一口气喝了1.5升的有点甜")

laowang = Person()

laowang.eat("我")
laowang.drink()

运行结果:

PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person7.py"
吃了两碗米饭的 我
一口气喝了1.5升的有点甜

1.10 公有变量和私有变量

请添加图片描述

1.11 继承(inheritance)

  • 子类能够继承父类中所有非私有的成员变量和成员函数。

请添加图片描述

class Person():
    money=10086
    def say_hello(self):
        print("hello!")

# 继承 - Teacher是Person的子类
# 子类能够继承父类中所有非私有的成员变量和成员函数
class Teacher(Person):
    pass

amy = Teacher()

print(amy.money)
amy.say_hello()

运行结果:

PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\tempCodeRunnerFile.py"    
10086
hello!

标签:10,python,money,self,Person,OOP,print,xiaoxu,属性
来源: https://blog.csdn.net/XING_Gou/article/details/119381537

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有