首页 > 其他分享 >17.面向对象【一】

17.面向对象【一】

时间:2024-04-30 15:35:22浏览次数:22  
标签:__ School name 17 age 面向对象 st1 print

【一】面向过程 与 面向对象

1)面向过程

  • 关键在于过程,即流水线,用到哪个功能写哪个
  • 可将复杂的问题流程化,进而简单

2)面向对象

  • 关键在于对象,将程序进行整合,成为一个整体
  • 解决了程序的扩展性

【二】类与对象

对应程序:先有类才能有对象

1)类

即类别、种类,是面向对象分析和设计的基石

  • 关键字class声明一个类,类名建议驼峰体
class Eg(object):
    num = '1'
    ...(可直接定义数据,函数)
# object:父类
# 也可简写成(class Eg:)
eg =Eg()
print(eg)	# <__main__.Eg object at 0x0000020827CF7590>
print(eg.num)	# 1

【三】面向对象编程

# 定义类
class School(object):
    school_name = 'xx学校'

    def read(self):
        print('read book')

1)查看类的名称空间

查看类这个容器内盛放的东西

print(School.__dict__)
# {'__module__': '__main__', 'school_name': 'xx学校', 'read': <function School.read at 0x0000027229A14400>, '__dict__': <attribute '__dict__' of 'School' objects>, '__weakref__': <attribute '__weakref__' of 'School' objects>, '__doc__': None}

2)对象的实例化

得到的对象每一次都是新的

student1 = School()
student2 = School()

3)修改对象的属性

1.通过类的名称空间修改

st1 = School()
st2 = School()
st1.__dict__['name'] = 'a'
st1.__dict__['age'] = 18
print(st1.__dict__)  # {'name': 'a', 'age': 18}
print(st1.name)  # a
st2.__dict__['name'] = 'b'
st2.__dict__['age'] = 20
print(st2.__dict__)  # {'name': 'b', 'age': 20}
print(st2.age)  # 20

2.封装成函数

st1 = School()
st2 = School()
def into(st, name, age):
    st.name = name
    st.age = age
into(st=st1, name='a', age=18)
print(st1.__dict__)  # {'name': 'a', 'age': 18}
into(st2, 'b', 20)
print(st2.__dict__)  # {'name': 'b', 'age': 20}

3.封装成类

class School(object):
    school_name = 'xx学校'
    def read(self):
        print('read book')
    def into(st, name, age):
        st.name = name
        st.age = age
st1 = School()
st2 = School()
School.into(st=st1, name='a', age=18)
School.into(st2, 'b', 20)
print(st1.__dict__)  # {'name': 'a', 'age': 18}
print(st2.__dict__)  # {'name': 'b', 'age': 20}

4.类的__init__方法

class School(object):
    school_name = 'xx学校'
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def read(self):
        print('read book')
st1 = School(name='a', age=18)
st2 = School('b', 20)
print(st1.__dict__)  # {'name': 'a', 'age': 18}
print(st2.__dict__)  # {'name': 'b', 'age': 20}

4)属性访问

1.类的属性

  • 类中定义的名字都是类的属性(数据属性,函数属性)

    class School(object):
        school_name = 'xx学校'
        def read(self):
            print('read book')
    print(School.__dict__)
    # {'__module__': '__main__', 'school_name': 'xx学校', 'read': <function School.read at 0x000001B02C874400>, '__dict__': <attribute '__dict__' of 'School' objects>, '__weakref__': <attribute '__weakref__' of 'School' objects>, '__doc__': None}
    print(School.school_name)
    # xx学校
    print(School.read)
    # <function School.read at 0x000001B02C874400>
    

2.对象属性

class School(object):
    school_name = 'xx学校'
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def read(self):
        print(f'{self.name}read book')
st1 = School(name='a', age=18)
# 查看
print(st1.__dict__)  # {'name': 'a', 'age': 18}
print(st1.name)  # a
# 新增
st1.course = "Python"
print(st1.__dict__)  # {'name': 'a', 'age': 18, 'course': 'Python'}
# 修改
st1.age = 20
print(st1.__dict__)  # {'name': 'a', 'age': 20, 'course': 'Python'}
# 删除
del st1.course
print(st1.__dict__)  # {'name': 'a', 'age': 20}

5)属性查找

1.类中定义的变量

  • 类中定义的变量是类的数据属性,是共享给所有对象用的,指向相同的内存地址

    class School(object):
        school_name = 'xx学校'
        def __init__(self, name, age):
            self.name = name
            self.age = age
        def read(self):
            print(f'{self.name}read book')
    st1 = School('a',10)
    st2 = School('b',20)
    print(id(School.school_name),
          id(st1.school_name),
          id(st2.school_name))
    # id输出相同
    

2.类中定义的函数

  • 类中定义的函数是类的函数属性,类可以使用,但必须遵循函数的参数规则,有几个参数需要传几个参数

    • 类的定义的函数主要给对象使用,且与对象绑定

    • 虽然所有对象指向的都是相同的功能,但绑定在不同对象就是不同的绑定方法,内存地址各不相同

      print(id(School.read),
            id(st1.read),
            id(st2.read))
      # id 各不相同
      
    • 绑定给谁就由谁来调用,就会将’谁’本身当做第一个参数自动传入

      st1.read()
      # a read book
      st2.read()
      # b read book
      

3.查找顺序

  • 在自己的对象中查找
  • 父类里面找
  • 基类里面找
  • object 里面找
  • 找不到则报错

【四】类的属性扩展

  • 类名.__name__ :类的名字(字符串)
  • 类名.__doc__:类的文档字符串
  • 类名.__base__:类的第一个父类(在讲继承时会讲)
  • 类名.__bases__:类所有父类构成的元组(在讲继承时会讲)
  • 类名.__dict__:类的字典属性
  • 类名.__module__:类定义所在的模块

标签:__,School,name,17,age,面向对象,st1,print
From: https://www.cnblogs.com/Mist-/p/18168102

相关文章

  • 17_Linux中断
    Linux中断1.什么是中断?CPU在正常运行期间,由外部或者内部引起的事件,让CPU停下当前正在运行的程序,转而去执行触发他的中断所对应的程序,这个就是中断。举例:我现在正在厨房做饭,突然电话响了,然后我关火去接电话,接完电话在回去开火继续做饭,这个过程就是中断的一个过程。在这个看似......
  • 【Modelsim问题】# ** Error: (vsim-3170) Could not find 'lab1_tb'.
     #**Error:(vsim-3170)Couldnotfind'lab1_tb'. testbench文件名与其中module 后紧跟的名称不匹配......
  • arc176d
    学到了一类题的通用方法。我们考虑位置贡献。令原来的数为\((A,B)\),新数为\(C\)。有状态:\((A,B),(B,A),(A,C),(C,A),(B,C),(C,B),(C,C)\)转移是\(\begin{bmatrix}1 & n-2 & 0 & 0 & n-2 & 0 \\C(n-2,2) & 0 & n-2 & n-2 & 0 & 0 \\0 & C(n-......
  • Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)
    SpringWebFlow远程代码执行漏洞(CVE-2017-4971)SpringWebFlow是一个适用于开发基于流程的应用程序的框架(如购物逻辑),可以将流程的定义和实现流程行为的类和视图分离开来。在其2.4.x版本中,如果我们控制了数据绑定时的field,将导致一个SpEL表达式注入漏洞,最终造成任意命令执行。......
  • Qt Creator + MSVC2017编译器配置指南
    QtCreator+MSVC2017编译器配置指南下载和安装MSVC2017编译器下载下载MSVC编译器安装工具:https://docs.microsoft.com/zh-tw/previous-versions/visualstudio/visual-studio-2017/install/use-command-line-parameters-to-install-visual-studio?view=vs-2017安装安......
  • HydroOJ 从入门到入土(17)批量转化其他格式题库(Python)
    新题库,新快乐,新痛苦。一、想法有了多种题库之后,常常会遇到大量题库无法转化到自己的OJ上。每次都要重新手写解析器,非常浪费时间,于是抽出了这个工具。本工具可以将抽取好的信息自动组装成符合HydroOJ格式的题目并自动压缩,解决后半部分的转化工作。二、实现1.准备包和相......
  • Java面向对象编程
    什么是面向对象:以类的方式组织代码,以对象的来组织(封装)数据三大特性:封装,继承,多态构造器:和类名相同,没有返回值;作用:new本质就是在调用构造方法,默认使用无参构造;还可以初始化对象的值;注意:定以有参构造之后,若还想使用无参构造的话必须要显示的定义;封装:数据的隐藏;通常应禁止......
  • 面向对象
    Ⅰ面向对象思想前戏【一】人狗大战小游戏【1】人狗大战小游戏描述我们现在需要设计一个人狗大战的小游戏人可以打狗,狗掉血,狗可以咬人,人掉血【2】人狗大战小游戏实现(1)分析人的属性人的名字人的类型人的年龄人的攻击力人的生命值狗的属性狗的名字狗的类型狗......
  • CobaltStrike 远控木马在42.194.250.177的80端口报警;奇安信网神态势感知报警(多次)
    在态势感知上报毒——目的IP:42.194.250.177的80端口。报毒名称为CobaltStrike远控木马活动事件,这个情况发生在已经封禁掉源IP和目的IP的前提下,所以让人百思不得其解。然后我登上了我的kali访问了这个目的IP的80端口,嘿!您猜怎么着?!这不是明摆着,欢迎您的到来嘛!这我不就来了嘛,Dir......
  • 面向对象————类
    【一】什么是面向过程【1】面向过程介绍面向过程,核心在于“过程”二字过程的终极奥义就是将程序“流程化”过程是“流水线”,用来分步骤解决问题的过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式。......