• 6-1 类的语法


    参考:https://www.cnblogs.com/Eva-J/articles/7293890.html
    一 类的概念和格式

    1 概念
    # 类 : 具有相同属性和相同动作的一类事物 组成一个类,如人类
    # 对象 : 具体的某一个具有实际属性 和具体动作的一个实体。如蜘蛛侠就是一个对象

    # 类是抽象的
    # 对象是具体的

    2 例子
    类的第一个功能,类被创造出来 就是模子 是用来描述对象的
     1 class 类名:
     2     静态属性 = 123
     3     def 动态属性(self):
     4         # 在类中的方法的一个默认的参数,但也只是一个形式参数,约定必须叫self
     5         print('-->',self)
     6 print(类名.静态属性)#查看静态属性
     7 类名.静态属性=456
     8 print(类名.静态属性) #修改静态属性
     9 类名.静态属性2='abc' #增加静态属性
    10 print(类名.静态属性2)
    11 del 类名.静态属性2 #删除静态属性
    12 
    13 print(类名.动态属性)
    14 类名.动态属性("我要把1传给动态属性self") #这个1传给了self
    15 #print(类名.静态属性2)
    #类的第二个功能实例化(创造一个具体的对象)
    1 class Person:pass
    2 alex=Person() #对象=类名() 也叫实例化
    3 print(alex) #对象
    4 print(Person) #
    5 print(alex.__dict__) #默认是空字典
    6 alex.__dict__['name']='alex' # 给alex对象添加属性
    7 alex.sex='' #给alex对象添加属性
    8 print(alex.__dict__)

    3 实例化的过程

    # 类名()就是实例化
    # 在实例化的过程中 发生了很多事情是外部看不到的
    # 1.创建了一个对象
    # 2.自动调用__init__方法
    # 这个被创造的对象会被当做实际参数传到__init__方法中,并且传给第一个参数self
    # 3.执行init方法中的内容
    # 4.自动的把self作为返回值 返回给实例化的地方

     1 实例化的过程
     2  
     3 class Person:
     4 #     def __init__(self,name,hp,dps,sex):
     5 #         self.name = name
     6 #         self.hp = hp
     7 #         self.dps = dps
     8 #         self.sex = sex
     9 #         self.bag = []
    10 #
    11 # alex = Person('alex',250,5,'N/A')
    12 # print('alex : ',alex)
    13 # print(alex.__dict__)
    14 # print(alex.name)

    4 实例

    人狗大战

     1 class Person:
     2     def __init__(self,name,sex,dps,hp):
     3         self.name=name
     4         self.sex=sex
     5         self.dps=dps
     6         self.hp=hp
     7     def attack(self,dog): # 人打狗
     8         dog.hp-=self.dps
     9         print('%s打了%s,%s还剩%s点血'% (self.name,dog.name,dog.name,dog.hp))
    10 
    11 class Dog:
    12 
    13     def __init__(self,name,kind,hp,dps):
    14         self.name=name
    15         self.kind=kind
    16         self.hp=hp
    17         self.dps=dps
    18     def bite(self,person):#狗咬人
    19         person.hp -= self.dps
    20         print('%s咬了%s,%s还剩%s点血'% (self.name,person.name,person.name,person.hp))
    21 
    22 alex = Person('alex','',250,5)
    23 ha2 = Dog('小白','藏獒',1000,200)
    24 ha2.bite(alex)
    25 #alex.attack(ha2) #第一种写法
    26 # 对象名.方法名 相当于调用一个函数,默认把对象名作为第一个参数传入函数 alex调用了attack函数
    27 Person.attack(alex,ha2)#第二种写法
    28 print(ha2.hp)
    计算园的面积和周长
     1 # from math import pi
     2 # class Yuan:
     3 #     def __init__(self,r):
     4 #         self.r=r
     5 #     def Yuan_mianji(self):
     6 #
     7 #         return pi *self.r **2
     8 #     def Yuan_zc(self):
     9 #
    10 #         return pi * 2*self.r
    11 # yuan = Yuan(3)
    12 # mj=yuan.Yuan_mianji()
    13 # #mj1=Yuan.Yuan_mianji(yuan)
    14 # zc=yuan.Yuan_zc()
    15 # print('我是面积%s
    我是周长%s'%(mj,zc))

    5 命名空间

    # 类有自己的命名空间
    # 对象也有自己的命名空间
    # 对象能访问类的命名空间
    # 类不能访问对象的命名空间
     1 class Person:
     2     COUNTRY = ['中国人']       # 静态属性
     3     country = '中国人'
     4     def __init__(self,name):
     5         self.name = name
     6     def eat(self):
     7         print('%s在吃泔水'%self.name)
     8 alex = Person('alex')
     9 egon = Person('egon')
    10 # print(alex.name)
    11 # print(alex.country)
    12 # alex.country='印度人' #这个只是在alex这个对象里面生效
    13 # print(alex.country)
    14 # print(egon.country)
    15 # print(Person.country) # Person里面的没有改过来
    16 # alex.COUNTRY[0] = '印度人' # 改的是列表里面的元素
    17 # print(alex.COUNTRY)
    18 # print(egon.COUNTRY)
    19 # print(Person.COUNTRY)
    20 alex.COUNTRY=['印度人']
    21 print(egon.COUNTRY) #中国人
    22 print(Person.COUNTRY) #中国人
    23 print(alex.COUNTRY)
    结论:
    # 在访问变量的时候,都先使用自己命名空间中的,如果自己的空间中没有,再到类的空间中去找
    # 在使用对象修改静态变量的过程中,相当于在自己的空间中创建了一个新的变量
    # 在类的静态变量的操作中 应该使用类名来直接进行操作 就不会出现乌龙问题



  • 相关阅读:
    Java Logger 使用总结
    java中用Eclipse打JAR包,包含外部JAR
    安装e(fx)clipse到Eclipse (JavaFX工具)
    肾亏怎么办 下面给你支支招
    汇编cmp比较指令详解
    eclipse安装插件报错Unable to read repository at
    Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
    Java开发桌面程序学习(二)————fxml布局与控件学习
    JavaFX入门(二):JavaFX和FXML
    Apache Tomcat 文件包含漏洞 (CVE20201938) 复现
  • 原文地址:https://www.cnblogs.com/huningfei/p/9035565.html
Copyright © 2020-2023  润新知