python变量 方法 属性

所有成员中,只有普通变量/字段/属性的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通变量/字段/属性。
而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份。

变量/字段/属性,以下统称为“变量”

普通/实例/对象方法,以下统称为“实例方法”

局部和普通表达的是同一个意思, 全局/类/静态 变量表达的是同一个意思

通过类创建对象时,如果每个对象都具有相同的变量,那么就使用静态变量(也叫全局变量)

class Province:
# 静态/全局 变量
country ='中国' def __init__(self, name):
# 普通/局部 变量
self.name = name obj = Province('湖北省')
print(obj.name) # 对象访问普通/局部 变量
print(Province.name) # 类访问普通/局部 变量
此处会报错,类无法直接访问局部变量 print(obj.country) # 对象访问静态/全局 变量
print(Province.country) # 类访问静态/全局 变量

总结:静态/全局变量可以被类和实例对象访问,普通/局部变量只能被实例对象访问

class Province:
# 静态/全局 变量
country ='中国'
GDP = 0 def __init__(self, name):
# 普通/局部 变量
self.name = name
GDP = GDP +1
# 会报错:无法在普通/实例对象 方法里面直接访问静态/全局 变量 # 普通/实例对象 方法
def get_GDP(self):
return GDP # 普通/实例对象 方法
def add_GDP(self):
GDP = GDP +1

在普通/实例对象 方法里面可以通过类.全局变量来访问静态/全局变量

class Province:
# 静态/全局 变量
country ='中国'
GDP = 0 def __init__(self, name):
# 普通/局部 变量
self.name = name
Province.GDP = Province.GDP +1
        
    # 普通/实例对象 方法
def get_GDP(self):
return Province.GDP # 普通/实例对象 方法
def add_GDP(self):
     self.add_count = 10
Province.GDP = Province.GDP +1
        self.GDP = self.GDP + self.add_count

总结:无法在普通/实例对象的方法里面直接访问静态/全局 变量,在普通/实例对象的方法里面可以通过slef.全局变量    或者    类.全局变量来访问静态/全局变量

实例/普通方法一般只能被实例对象调用
实例方法里面可以通过self.来访问局部变量,全局变量和其他实例方法,无法访问静态方法和类方法
实例方法里面可以通过类名.来访问全局变量和所有方法(包括其他实例方法,静态方法,类方法)

class Province:
# 静态/全局 变量
country ='中国'
GDP = 0 def __init__(self, name):
# 普通/局部 变量
self.name = name
Province.GDP = Province.GDP +1 # 普通/实例对象 方法
def add_GDP(self):
self.add_count = 10
Province.GDP = Province.GDP +self.add_count @staticmethod
def GDP_rate():
GDP_sum = GDP +self.add_count
rate = GDP/GDP_sum
会报错:静态方法里面无法访问局部变量和全局变量

静态方法意思是把 @staticmethod 下面的函数和所属的类截断了,这个函数就不属于这个类了,没有类的属性了,只不是还是要通过类名的方式调用

静态方法可以被类和实例对象调用(建议使用类调用)
静态方法里面不能使用self
静态方法里面不能访问类变量(全局/静态变量)和实例变量(局部变量),只能访问静态方法自己内部的变量

静态方法里面可以通过类名.来访问除了实例/局部变量以外的所有变量和方法(包括:普通/实例方法,类方法,静态方法,类变量)
静态方法的好处:不需要定义实例就可以访问这个方法,多个实例共享此静态方法,静态方法就像类里面的工具库

class Province:
# 静态/全局 变量
country ='中国'
GDP = 0 def __init__(self, name):
# 普通/局部 变量
self.name = name
Province.GDP = Province.GDP +1 # 普通/实例对象 方法
def add_GDP(self):
self.add_count = 10
Province.GDP = Province.GDP +self.add_count @classmethod
def GDP_rate_cls(cls):
GDP_sum = cls.GDP +self.add_count
rate = cls.GDP/GDP_sum
会报错:类方法无法访问普通/局部 变量

类方法可以被类和实例对象调用(建议用类调用)
类方法里面不能使用self,要使用cls
类方法里面不能访问实例变量(局部变量),可以访问类变量(全局/静态变量)
类方法里面可以访问所有方法(主要是通过cls.)

类对象,方法,变量之间的调用关系如下图:

 橙色表示因为局部变量存储在对象里面(不在类里面)的原因导致调用/访问失败

黄色表示无法调用/访问                      灰色表示可以调用/访问,但是不建议

总结:

1,实例/局部变量存储在实例对象里面(不在类里面)导致类,类方法,静态方法无法调用/访问

2,全局变量一般都可以来调用

3,实例方法不能直接被类方法和静态方法调用(需要new一个对象),所以:类方法和静态方法无法直接调用实例变量和实例方法,实例变量和实例方法只能被实例对象和实例方法直接调用

4,实例方法一般都是通过self. 来调用所有变量和方法

5,类方法一般都是通过cls. 或者类名. 来调用其他变量和方法(不能直接调用实例/局部变量和实例方法,需要new一个对象)

6,静态方法像一个工具(与类和对象没有什么关系,主要为类和对象提供辅助工具方法),静态方法一般都是需要传入参数,也可以通过类名. 来调用其他变量和方法(不能直接调用实例/局部变量和实例方法,需要new一个对象)

python变量 方法 属性的更多相关文章

  1. python魔法方法-属性访问控制

    属性访问控制 所谓的属性访问控制就是控制点号访问属性的行为,而且不仅是类的外部,连类的内部也受控制,代码见真章,边看代码边解释: __getattr__(self, item) 定义当访问不存在的属性 ...

  2. Python中变量的属性以及判断方法

    1.变量的属性 在Python中,创建一个变量会给这个变量分配三种属性: id ,代表该变量在内存中的地址: type,代表该变量的类型: value,该变量的值: x = 10 print(id(x ...

  3. python中类中属性和方法的具体定义方法和使用

    1. Python中类中特性分成属性和方法 属性和方法都分为私有和公有的,私有的只可以在本类中使用外部是无法访问的 2. 定义属性(成员变量)的语法格式(公有属性/私有属性) class 类名: de ...

  4. python中类的定义、实例化、封装以及私有变量/方法

    1.  定义类 python中定义一个类的格式如下: class MyClass(object): def __init__(self,data1,data2): self.__data1=data1 ...

  5. Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性

    什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html 什么是 Python 类.类对象.实例对象 https://www.cnblogs.com ...

  6. 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型

    我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...

  7. Python中类的方法属性与方法属性的动态绑定

    最近在学习python,纯粹是自己的兴趣爱好,然而并没有系统地看python编程书籍,觉得上面描述过于繁琐,在网站找了一些学习的网站,发现廖雪峰老师的网站上面的学习资源很不错,而且言简意赅,提取了一些 ...

  8. python 面向对象类成员(字段 方法 属性)

    一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class Province: # 静态字段 countr ...

  9. python动态添加属性和方法

    ---恢复内容开始--- python动态添加属性: class Person(object): def __init__(self,newName,newAge): self.name = newN ...

  10. 全面了解python中的类,对象,方法,属性

    全面了解python中的类,对象,方法,属性 python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性( ...

随机推荐

  1. k8s中的pod更新策略

    StatefulSet(有状态集,缩写为sts)常用于部署有状态的且需要有序启动的应用程序,比如在进行SpringCloud项目容器化时,Eureka的部署是比较适合用StatefulSet部署方式的 ...

  2. 8.16考试总结(NOIP模拟41)[你相信引力吗·marshland·party?·半夜]

    美丽的不是这个世界,而是看世界的你的眼神. T1 你相信引力吗 解题思路 好像只有我一个人没有看出来这个题是单调栈(现在一看区间问题就是双指针,线段树) 维护一个单调递减的栈. 我们把最大值放到左端点 ...

  3. 修复Apache Log4j 2 远程代码执行漏洞jar包(jdk8编译)

    Apache Log4j2是一个基于Java的日志记录工具.该工具重写了Log4j框架,并且引入了大量丰富的特性.该日志框架被大量用于业务系统开发,用来记录日志信息.大多数情况下,开发者可能会将用户输 ...

  4. 异构数据源同步之数据同步 → DataX 使用细节

    开心一刻 中午我妈微信给我消息 妈:儿子啊,妈电话欠费了,能帮妈充个话费吗 我:妈,我知道了,我帮你充 当我帮我妈把话费充好,正准备回微信的时候,我妈微信给我发消息了 妈:等会儿子,不用充了,刚刚有个 ...

  5. 图片jpg,png转为BASE64编码

    -- using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace aliy ...

  6. 太卷了,史上最简单的监控系统 catpaw 简介

    指标监控的痛点 当下比较流行的监控系统,比如 Prometheus.Nightingale.VictoriaMetrics,都是基于数值型指标的监控系统,这类监控系统的痛点在于:告警的时候只能拿到异常 ...

  7. mysql 8.0 客户端

    1.mysql 8.0 command line client 2.mysql workbench

  8. Qt 应用程序中自定义鼠标光标

    在 Qt 应用程序中,你可以自定义鼠标光标.你可以使用 `QCursor` 类来设置不同类型的鼠标光标,比如内置样式或者自定义的图片.以下是一些使用示例: 使用内置光标样式 Qt 提供了一些内置的光标 ...

  9. C# pythonnet(1)_传感器数据清洗算法

    Python代码如下 import pandas as pd # 读取数据 data = pd.read_csv('data_row.csv') # 检查异常值 def detect_outliers ...

  10. 一文为你深度解析LLaMA2模型架构

    本文分享自华为云社区<[云驻共创]昇思MindSpore技术公开课 大咖深度解析LLaMA2 模型架构>,作者: Freedom123. 一.前言 随着人工智能技术的不断发展,自然语言处理 ...