一、类的简述

类时面向对象编程的核心内容。通常把具有相同特征(数据元素)与行为(功能)的事物描述定义为一个类,类是一个抽象的概念,把类实例化既可以得到一个对象。

因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。

类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。

比如:把人类即为一个抽象的类,“老王”则为一个的人即对象。每个对象都有一些相同的特征,但具体的数值却不一定相同。如:每个人都有“姓名”,“国籍”,“年龄”等特征。还具有一些相同的行为,如:“吃饭”,“睡觉”,“工作”等

可以简洁的描述为:Person ({"name", "country", "age"}, {"eat", "sleep", "work"})。

在这里可以看到,类有两种属性:数据属性,行为属性。在类中行为属性一般称为“方法”。

二、数据属性

属性有两种,类属性,实例属性(对象的属性),通常把所有对象共同拥有的属性定义为类属性,如:每个人都只有两只眼等,实例属性则时根据不同的对象赋值不一样的值,如:姓名等

下面来看一个简单的代码实现:

class Person(object):

eyes = 2

def __init__(self, name, age):

self.name = name

self.age = age

def eat(self, food):

print("%s 吃:%s" % (self.name, food))

def eye(self):

print("%s" % (self.eyes))

p1 = Person("张三", 18)

p2 = Person("李四", 19)

print("类的属性:", Person.__dict__)

print("对象p1的属性:", p1.__dict__)

print("对象p2的属性:", p2.__dict__)

p1.eat("番茄炒鸡蛋")

p1.eye()

#输出结果

类的属性: {'__module__': '__main__', 'eyes': 2, '__init__': , 'eat': , 'eye': , '__dict__': , '__weakref__': , '__doc__': None}

对象p1的属性: {'name': '张三', 'age': 18}

对象p2的属性: {'name': '李四', 'age': 19}

张三 吃:番茄炒鸡蛋

2

先输出,类, p1, p2 的属性,得出结论(1)实例化的对象只具备自己的数据属性(2)类的属性包含:类的数据属性、函数属性。

这里要注意几点:

1)方法的第一个参数不用传值,但必须在定义,因为Python解释器,做了这样的一件事,自动把调用的对象当作第一个参数传值给方法,通常定义为self

2)对象访问属性的过程,查找属性__dict__字典,找到就访问这个属性,当对象的属性字典不存在该属性时,则会去类属性里边找,类里边也不存在时则会报错

3)类属性所有通过该类创建的对象都可以访问

1、类属性的增删该查

class Person(object):

# 类属性添加的第一种方式

eyes = 2

def __init__(self, name):

self.name = name

def say(self, w):

print("%s说了%s" % (self.name, w))

print("1--类的属性:", Person.__dict__)

# 类属性添加的第二种方式

Person.arm = 2

print("2--添加类的属性:", Person.__dict__)

# 类属性修改

Person.arm = 1

print("3--修改类的属性:", Person.__dict__)

# 类属性删除

del Person.eyes

print("4--删除类的属性:", Person.__dict__

#输出结果

1--类的属性: {'__module__': '__main__', 'eyes': 2, '__init__': , 'say': , '__dict__': , '__weakref__': , '__doc__': None}

2--添加类的属性: {'__module__': '__main__', 'eyes': 2, '__init__': , 'say': , '__dict__': , '__weakref__': , '__doc__': None, 'arm': 2}

3--修改类的属性: {'__module__': '__main__', 'eyes': 2, '__init__': , 'say': , '__dict__': , '__weakref__': , '__doc__': None, 'arm': 1}

4--删除类的属性: {'__module__': '__main__', '__init__': , 'say': , '__dict__': , '__weakref__': , '__doc__': None, 'arm': 1}

看代码应该就差不多明白类属性的操作了。

注:类属性一般一经定义,不会在执行的过程中增加、删除类的属性

定义类属性一般只用第一种方法,其它的骚操作了解就好,忘了它吧

2、实例属性的增删改查

class Person(object):

def __init__(self, name):

# 实例属性添加第一种方式

self.name = name

def say(self, w):

print("%s说了%s" % (self.name, w))

p1 = Person("张三")

p2 = Person("李四")

print("1--p1的属性:", p1.__dict__)

print("1--p2的属性:", p2.__dict__)

# 实例属性添加第二种方式

p1.age = 20

print("2--p1的属性:", p1.__dict__)

print("2--p2的属性:", p2.__dict__)

# 删除实例属性

del p1.name

print("3--p1的属性:", p1.__dict__)

print("3--p2的属性:", p2.__dict__)

# 修改实例属性

p1.age = 10

print("4--p1的属性:", p1.__dict__)

print("4--p2的属性:", p2.__dict__)

# 输出结果

1--p1的属性: {'name': '张三'}

1--p2的属性: {'name': '李四'}

2--p1的属性: {'name': '张三', 'age': 20}

2--p2的属性: {'name': '李四'}

3--p1的属性: {'age': 20}

3--p2的属性: {'name': '李四'}

4--p1的属性: {'age': 10}

4--p2的属性: {'name': '李四'}

实例属性跟类属性的操作差不多。从上也可以得出结论,对对象 p1 的操作并不影响 p2 的属性。

注:实例属性一般放在init方法里边初始化,不会在执行的过程中增加、删除对象的属性

三、方法

1、普通的方法

上边没有@符号修饰,供外部实例调用,普通的方法也叫实例方法,但虽然叫实例方法但却与类相关,存储在类的属性中

2、类方法

上边有@classmethod修饰,定义时第一个参数必须为"cls",并通过cls来调用类属性,无法访问实例属性

3、静态方法()

上边有@staticmethod,与类相关但不需要访问属性,无法调用其它方法与属性

class Person(object):

eyes = 2

def __init__(self, name):

self.name = name

def say(self, w): # 普通方法

print("%s say %s" % (self.name, w))

@classmethod

def cls_md(cls): # 类方法

print("这是类方法", cls.eyes)

@staticmethod

def stat(): # 静态方法

print("这是静态方法")

p1 = Person("zhangs")

print(Person.__dict__)

p1.say("hello")

p1.cls_md()

p1.stat()

# 输出结果

{'__module__': '__main__', 'eyes': 2, '__init__': , 'say': , 'cls_md': , 'stat': , '__dict__': , '__weakref__': , '__doc__': None}

zhangs say hello

这是类方法 2

这是静态方法

4、方法的增(了解即可)

class Person(object):

eyes = 2

def __init__(self, name):

self.name = name

def say2(self): # 普通方法

print("%s 增加普通方法" % (self.name))

@classmethod

def ha2(cls): # 类方法

print("增加类方法", cls.eyes)

@staticmethod

def stat2(): # 静态方法

print("增加静态方法")

print("增加前:", Person.__dict__)

Person.say2 = say2

Person.ha2 = ha2

Person.stat2 = stat2

print("增加后:", Person.__dict__)

p1 = Person("zhangs")

p1.say2()

p1.ha2()

p1.stat2()

# 输出结果

增加前: {'__module__': '__main__', 'eyes': 2, '__init__': , '__dict__': , '__weakref__': , '__doc__': None}

增加后: {'__module__': '__main__', 'eyes': 2, '__init__': , '__dict__': , '__weakref__': , '__doc__': None, 'say2': , 'ha2': , 'stat2': }

zhangs 增加普通方法

增加类方法 2

增加静态方法

四、私有化

1、xx:公有变量

2、_xx:单前置下划线,私有化属性或方法,类对象和子类可以访问,from module import * 禁止导入,但from module import _xx 或 Import module还可以导入

3、__xx:双前置下划线,私有属性或方法,外部无法访问到(因为名字重整了,__xx变为_classname__xx),兼具_xx的特性

4、__xx__:前后双下划线,用户名空间的魔法对象或属性,例如:__init__,一般不��自己定义这样的变量名

5、xx_:单后置下划线,与python关键字重名+_区分,不要定义这样的变量名

python类属性定义_Python中类的定义与使用相关推荐

  1. python类属性初始化_Python类定义、属性、初始化和析构

    类的定义,属性和方法概念 方法中self的作用和意义 初始化( __init__ ) 和 析构方法( __del__ ) 类的定义 class 类名 实例 实例名 = 类名() 一个"实例& ...

  2. python类属性初始化_Python:如何模拟类属性初始化函数

    这里实际发生的是当你实际导入模块时,fn()已经执行了.因此,在您已经评估了存储在类属性中的方法之后,模拟就会出现. 因此,当您尝试模拟方法时,您尝试进行的测试为时已晚. 如果只是在方法中添加prin ...

  3. python 类属性排序_Python实现多属性排序的方法

    多属性排序: 把需要排序的属性拿出来作为一个 tuple,主要的放前面,次要的放后面. 假如某对象有n个属性,那么先按某规则对属性a进行排序,在属性a相等的情况下再按某规则对属性b进行排序,以此类推. ...

  4. python类介绍说明_python 中类

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. python类属性和实例属性_Python 类属性与实例属性,类对象与实例对象用法分析...

    本文实例讲述了Python 类属性与实例属性,类对象与实例对象用法.分享给大家供大家参考,具体如下: demo.py(类属性,所有实例对象共用类属性): # 定义工具类 继承object是为了兼容py ...

  6. Python类属性和实例属性分别是什么?

    实例属性即同一个类的不同实例,其值是互不关联的,也不会互相影响的,定义时使用"self.属性名",调用时也使用"self.属性名". 类属性则是同一个类的所有实 ...

  7. Python类属性、类方法和静态方法

    Python类属性.类方法和静态方法 在Python中,一切皆对象.通过类创建出来的对象是实例对象,类本身也是对象,称为类对象. 一.类属性 对象都有属性,我们常说的对象属性是实例对象拥有的属性,又称 ...

  8. Python类属性访问的魔法方法

    Python类属性访问的魔法方法: 1. __getattr__(self, name) - 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name) ...

  9. [转载] Python类属性、类方法和静态方法

    参考链接: Python中的类和实例属性 Python类属性.类方法和静态方法 在Python中,一切皆对象.通过类创建出来的对象是实例对象,类本身也是对象,称为类对象. 一.类属性 对象都有属性,我 ...

  10. 彻底搞懂Python类属性和方法的调用

    Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 一.类.对象概述 在面向对象程序设计中,把数据以及对数据的操作封装在一起,组成一个整体(对象 ...

最新文章

  1. *LOJ#2085. 「NOI2016」循环之美
  2. sorl java 建索引_solr 的客户端调用solrj 建索引+分页查询
  3. 中国城市园林绿化行业十四五规划方向与投资前景建议报告2022版
  4. PHP中用于精确计算的bcmath扩展
  5. [蓝桥杯2017初赛]方格分割-dfs+思维
  6. JavaFX官方教程(十一)之动画基础
  7. java字符串字典排序_java实现对map的字典序排序操作示例
  8. 交换排序图解_10大经典排序算法,20+张图就搞定
  9. 结对-四则运算答题器-开发环境搭建过程
  10. MySQL不同版本多实例部署——5.7和8.0
  11. C语言基础视频教程-欧阳坚-专题视频课程
  12. C语言按行列加密解密(英文文本)
  13. Vlan和Trank
  14. Python9--面向对象编程
  15. 湖南启动CCTV《星光达人秀》 《宾导会客厅》全球直播发布
  16. [HCTF 2018]WarmUp1PHP 代码审计
  17. Chrome 地址栏 Google 搜索错误处理 隐私设置错误 您的连接不是私密连接
  18. 没想到,买了这款不靠谱的达尔文重疾险易核版,成了他一生的噩梦
  19. JSP文件的运行过程
  20. 【Python】盘点全网下载量Top100的Python库

热门文章

  1. poj3274 找平衡数列(哈希加一点数学思维)
  2. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Saratov
  3. Spring对 JDBC 的支持,JdbcTemplate类的使用
  4. 10.11 cocoapods安装
  5. 不解决这六个问题,农商行怎么去玩大数据?
  6. VS快速定位文件、代码插件——DPack
  7. Windows Phone开发(25):启动器与选择器之WebBrowserTask 转:http://blog.csdn.net/tcjiaan/article/details/7404770...
  8. Oracle数据库端分页SQL语句
  9. 数据库优化java设计模式架构 策略 责任链
  10. Linux之用户/组管理以及任务调度学习总结