python中的类、对象+方法+属性
一、面向对象
类:一群具有相同特征或者行为的事物的一个统称,抽象的。
对象:是一个具体存在,是由类创建,并具有类的特征和行为的。
类(class): 相当于施工图纸(blueprint);对象(object):房子(已经建造好的)
假设你手上有施工图纸(Blueprint),里面有房子的所有信息(盖几层,厨房在哪,卧室在哪,怎么建)。
你已经在憧憬你以后在这个新家的生活了,买贵的家具,在厨房做好吃哒........但是呢,这些都是你的YY,你要做这些事情必须要等房子真正建好了以后才行。如果房子中途烂尾,你就啥也做不了,梦想无处安放。
所以说,‘一个建好的房子’很重要。在Python中,‘一切皆为对象’,这也是大家称之为 object oriented的意思。有了对象,咱们才能搞事情!!!

对于建好的房子也许会稍稍不一样,每个人都有各自的喜好,就像图中看到的,可能是房子的户型一样,但是呢,颜色不一样。重点:它们都是根据‘施工图纸’造出来的。
此链接对python的类和对象入门讲解比较形象 https://www.cnblogs.com/magicking/p/8971740.html
1 class People: # 房子设计图纸 2 3 def eating(self): # 实例方法 4 return '吃饭' 5 6 7 person = People() # 实例化类,可以理解为盖房子(创建对象) 8 print(person.eating()) # 使用对象+ . 的形式调用实例方法
二、方法
方法中分为类方法、静态方法、实例方法、构造方法(初始化)
构造方法:构造函数用于初始化类的内部状态,为类的属性设置默认值(是可选的)。如果不提供__init__方法,python将会给出一个默认的__init__方法
实例方法:第一个参数必须是实例对象,该参数一般约定为“self”,通过self来传递实例属性和方法(也可以传递类属性和方法)调用时要创建实例才能调用,如有初始化函数必须对初始化函数进行传参。
类方法:需要加上装饰器@classmethod,第一个参数必须是当前类对象,该参数名一般约定为“cls”,在类中通过cls来传递类的属性和方法(不能传递实例属性和实例方法),调用时可以直接类名.方法名直接调用,也可以创建实例调用。
静态方法:需要加上装饰器@staticmethod,参数随意,没有约定的“self”和“cls”参数,不能访问类和实例中的任何属性和方法,调用时可以直接类名.方法名直接调用,也可以创建实例调用。
实例方法如下:
1 class Goods: 2 def __init__(self, name, price): 3 self.name = name 4 self._price = price 5 self._discount = 1 # 折扣 6 7 @property 8 def price(self): 9 return self._price * self._discount 10 11 def change_price(self, new_discount): 12 self._discount = new_discount # 修改折扣 13 14 15 aa = Goods('苹果', 10) 16 aa.change_price(0.9) 17 print(aa.price) 18 19 bb = Goods('香蕉', 20) 20 bb.change_price(1.3) 21 print(bb.price)
类方法如下:
当一个方法中只涉及到静态属性的时候可以使用类方法(类方法用来修改类属性)。
1 class Goods: 2 _discount = 1 # 折扣 3 4 def __init__(self, name, price): 5 self.name = name 6 self._price = price 7 8 @property 9 def price(self): 10 return self._price * self._discount 11 12 @classmethod 13 def change_discount(cls, new_discount): 14 cls._discount = new_discount # 修改折扣 15 16 17 Goods.change_discount(0.9) 18 aa = Goods('苹果', 20) 19 bb = Goods('香蕉', 20) 20 print(aa.price) 21 print(bb.price)
静态方法如下:
静态方法是个独立的、单独的函数,它仅仅托管于某个类的名称空间中,方便于使用和维护。也就是说在静态方法中,不会涉及到类中的属性和方法的操作。
1 class People: 2 3 @staticmethod 4 def static_method(): # 类 5 return '我是静态方法' 6 7 8 person = People() # 实例化类(创建对象) 9 print(person.static_method())
三、属性
实例属性具体和某个实例对象有关系,并且一个实例对象和另一个实例对象之间是不共享属性的
类属性是和类对象有关系,并且多个实例对象之间共享一个类属性
1 class Property: 2 3 def __init__(self, name, age): # 构造方法 4 self.name = name # 实例属性 5 self.age = age # 实例属性 6 7 def get_name(self): 8 return self.name, self.age 9 10 # 创建了三个对象,且之间都没有任何共享 11 a = Property('小明', 10) 12 b = Property('小红', 11) 13 c = Property('小花', 12) 14 print(a.get_name(), b.get_name(), c.get_name())
1 class Property: 2 3 num = 0 # 类属性 4 5 def __init__(self, name): # 构造方法 6 self.name = name # 实例属性 7 Property.num += 1 8 9 def get_name(self): 10 return self.num, self.name, Property.num # 此处引用的类属性是类名.类属性和self.类属性 11 12 13 aa = Property('小明') 14 print(aa.get_name()) 15 bb = Property('小花') 16 print(bb.get_name()) 17 cc = Property('小红') 18 print(cc.get_name())
学习总结,仅供参考,如有疑义,欢迎找茬......

浙公网安备 33010602011771号