python中类对象、实例对象、类属性、实例属性、类方法、实例方法、静态方法

类对象、类属性与实例对象、实例属性的区别

在Python中一切皆是对象,类是一个特殊的对象即类对象,描述类的属性称为类属性。类属性在内存中只有一份,在__init__外部定义。

通过类创建的对象称为实例对象,描述实例对象的属性称为实例属性。实例属性在各自对象的内存中都保存一份,在__init__方法内部定义。

实例方法、类方法、静态方法的区别

这三种方法都是保存在类的内存中,调用者不同。

  • 实例方法由对象调用,至少一个self参数,self代表对象的引用。
  • 类方法有类调用,至少一个cls参数,并且需要装饰器@classmethod修饰。
  • 静态方法由类调用,不需要参数,需要装饰器@staticmethod修饰。

创建原则:

  • 只要访问了成员变量的?法都叫实例?法
  • 只访问类变量的?法叫类?法
  • 既不访问成员变量,也不访问类变量的方法叫成静态?法

举例说明

class Car(object):      # 类对象
    car_num = 0   # 类属性,在__init__外部定义。

    def __init__(self, brand, price):
        self.brand = brand  # 实例属性,在__init__内部定义
        self.price = price
        Car.car_num += 1

    def level(self):        # 实例方法,调用了实例属性
        if self.price > 300000:
            print(f"{self.brand}是高级轿车")
        else:
            print(f"{self.brand}是非高级轿车")

    @classmethod
    def car_count(cls):     # 类方法,只访问类变量
        print(f"我有{cls.car_num}辆车")

    @staticmethod
    def tips():     # 静态方法,既不访问成员变量,也不访问类变量
        print("温馨提示:开车不喝酒")

if __name__ == "__main__":
    bmw = Car("宝马", 200000)     # 通过类创建的对象称为实例对象
    bmw.level()
    wlhg = Car("五菱宏光", 400000)
    wlhg.level()
    Car.car_count()     # 调用类方法
    Car.tips()      # 调用静态方法

为什么会有静态方法?

静态方法既不访问成员变量,也不访问类变量,若写个和class同级别的def函数也能实现同样的功能,何必定义个静态方法呢?定义静态方法主要是规避两个模块调用同名函数的情况,

假设一个场景:为Car类定义一个同级别的def tips函数,再为Animal类定义一个同级别的def tips函数

class Car(object):
    pass

def tips():
    print("温馨提示:开车不喝酒")

class Animal(object):
    pass

def tips():
    print("温馨提示:不要伸手投食")

在python中,前面定义的函数会被后定义的同名函数覆盖,也就是说,按上面的场景调用tips 方法最终都调用的都是最后一个。为了明确各个tips所属类,于是就定义了静态方法。

原文地址:https://www.cnblogs.com/testlearn/p/12401537.html

时间: 2024-08-24 23:46:20

python中类对象、实例对象、类属性、实例属性、类方法、实例方法、静态方法的相关文章

python中类的输出或类的实例输出为何是<__main__类名 object at xxxx>这种形式?

原因: __str__()这个特殊方法将对象转换为字符串的结果 效果图: 代码: # 定义一个Person类 class Person(object): """人类""" def __init__(self, name , age): self.name = name self.age = age p = Person('小黑',18) print(p) print('\n\n\n\n\n') # 定义一个Person类 class Person

python 类属性 实例属性 类方法 实例方法 静态方法(转载)

本文是转载,纯粹是为了方便后面自己查看,建议还是看原文的:http://www.cnblogs.com/dolphin0520/archive/2013/03/29/2986924.html 一.先来谈一下类属性和实例属性 在前面的例子中我们接触到的就是类属性,顾名思义,类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似.对于公有的类属性,在类外可以通过类对象和实例对象访问. class people: name = 'j

Python中类的继承及类的属性和方法总结

1.类的继承 类的继承 继承是面向对象的重要特性之一, 继承关系继承是相对两个类而言的父子关系 子类继承了父类的所有公有属性和方法, 继承,实现了代码重用 使用继承 继承可以重用已经存在的数据和行为,减少代码的重复编写, Python在类名后使用一对括号来表示继承关系,括号中的即类为父类 class Myclass(ParentClass), 如果父类定义了__init__方法,子类必须显式调用父类的__init__方法, ParentClass.__init__(self,[args...])

python类方法/实例方法/静态方法

类方法:隐式接收第一个参数为类本身的方法,通过类或实例皆可调用,在类方法定义中不能访问实例属性及调用实例方法,可以访问已定义的类属性和调用已定义的类方法,使用@classmethod装饰器进行定义: 1 class Test(object): 2 @classmethod 3 def method(cls,*args,**kw):#此处cls即代表Test类本身 4 pass 实例方法:隐式接收第一个参数为实例本身的方法,只能通过实例进行调用,在实例方法定义中可以访问自身已定义过的实例属性及类属

python学习day11 面向对象编程 类和实例

class Student(object): #class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的.通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类. def __init__(self,name,score): #通过定义一个特殊的__init__方法,在创建实例的时候,就把类的name,score等属性绑上去,__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__

Python 面向对象编程基础——初始化实例、类属性、方法

#1.初始化实例化属性.#可接受任意关键字参数,并把他们都作为属性赋值给实例.使用**kw,除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过setattr(self, 'name', 'xxx')设置属性.class Person(object):    def __init__(self, name, gender, **kw):        self.name = name        self.gender = gender        for k,v i

只能通过类而不能通过类的实例访问常量属性

1.静态属性.静态方法 在面向对象编程中,我们不仅可以通过对象访问方法和属性,还可以通过类来访问它们.这样的方法和属性就是“静态的”(static),必须用static关键字来声明. [php] view plaincopyprint? class staticExample { staticpublic $num = 0; staticpublic function sayNum() { echoself::num; } } 静态方法是以类作为作用域的函数.静态方法不能访问这个类中的普通属性,

python初级(302) 6 对象

函数可以把收集一些代码,列表可以收集变量(数据),对象可以把函数和数据收集在一起. 一.真实世界中的对象: 以篮球为例:通过颜色,大小,重量,价格等来描述一个球,这些就是球的属性,属性也叫(特性):一个物品(对象)本来就有的东西. 球拿到手,我们需要玩,比如捡球,抛球,拍球或者充气.我们把这些操作称为动作. 真实世界的真实对象(物品)包括两个方面 1.如何描述(属性或特性) 2.可以对它做什么(或是它自己能做什么)(动作) 二.Python中的对象 1.一些概念 在Python中,一个对象的特征

Java判断类和实例的关系

?? 通常我们使用instanceOf关键字来判断一个对象是否是类的实例,最近博主看到isInstance关键字,不解与instanceOf的区别,故度娘了一下,顺便涨了一下姿势. ?? Java中判断类和实例的关系有3个关键字:instanceof, isInstance以及isAssignableFrom. instanceof:用来判断对象是否是类的实例 isInstance:用来判断对象是否属于某个类型的实例 isAssignableFrom:用来判断类型间是否存在派生关系 ??看完上面

python基础5-面向对象编程

1.类和对象之封装 #方法1 def Bar(): print "Bar" def Hello(name): print "i am %s" %(name) #方法2 class Foo(): def Bar(self): print 'Bar' def Hello(self,name): print "i am %s" %name 对于数据库的增删改查 ####方式1 def fetch(hostname,port,username,passw