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())

 

学习总结,仅供参考,如有疑义,欢迎找茬......

posted @ 2020-03-07 17:13  一名小测试  阅读(1139)  评论(0)    收藏  举报