初识python面向对象编程(1)复习

面向对象编程概述01

部分细节就不再过多的描述了,主要记一些不太懂的或者记忆模糊的地方

 

对象分为两种:

  • 类对象

  • 实例对象

实例对象由类对象创建出来,类对象就是生成实例对象的模板。

 

1,oop的大体步骤:

  1. 抽象出类对象

  2. 抽象出类对象的属性

  3. 抽象出类对象的行为(方法)

  4. 根据类对象创建实例

  5. 通过实例对象访问属性和方法

行为(方法)是类中特殊的函数;类属性就如下面所说,分为类属性和实例属性

 

https://blog.csdn.net/haruhi330/article/details/78811277

上面链接有对类属性和类方法的具体解释,这里还是记下一部分:

1:属性

尽量把需要用户传入的属性作为实例属性,而把同类都一样的属性作为类属性。实例属性在每创建一个实例时都会初始化一边,不同实例的实例属性可能不同,但是实例的类属性都相同。

一:实例属性

       初始化最好在__init__(self,...)中,

       内部调用都要加上self.

       外部调用时用instancename(实例名).propertyname(属性名)

        内外部时相较于类对象而已

 

二:类属性

    在__init__()外初始化

    在内部用classname.类属性名调用

    在外部既可以用classname.类属性名又可以用instancename.实例属性名来调用。

 

三:私有属性

  1.     单下划线_开头:只是告诉别人这是私有属性,外部仍然可以访问更改

     2.     双下划线__开头:外部不可以通过instacename.propertyname来访问或者更改实际上将其转化为了_classname__propertyname(有待理解)

 

2:方法

1): 普通类方法:

    def fun_name(self,...):

        pass

外部实例调用

 

2):静态方法:@staticmethod

    不能访问实例属性!!!

    参数不能传入self!!!

    与类相关但是不依赖类与实例的方法(需要进一步明确)

 

3):类方法:@classmethod

    不能访问实例属性!!!

    参数必须传入cls!!!

    必须传入cls参数(即代表了此类对象——区别——self代表实例对象),并且用此来调用类属性:cls.类属性名

*@staticmethod与类方法都可以通过类或实例来调用。其两个的特点都是不能调用实例属性

简单总结:类属性和类方法时类固有的方法和属性,不会因为实例不同而改变。

 

继续:

类方法是类中特殊的函数,与普通函数的区别;

  1. 定义方法时,方法的第一个形参表示调用该方法的实力对象,第一个形参的名称通常时self,也可以时其他名称/

  2. 调用方法时,系统自动将调用该方法的实例对象作为实参传递给第一个形参。第1个实参传递给第2个形参,依此类推。

 

2.实例属性

绑定实例对象属性的方式有两种:

    1.在类对象的内部:推荐在__init__方法中绑定,

             self.属性名 = 属性值

    2.在类对象外部

            实例对象.属性名 = 属性值,若属性已存在,就是对属性进行修改

 

 

访问实例属性的两种方式:

  1. 在类对象的内部:self.属性名

  2. 在类对象的外部:实例对象.属性名

实例对象.__dict__:

可以获取该实例对象所绑定的所有属性及其值的字典

 

 

3.类属性

类属性指的是类对象所绑定的属性

 

绑定类属性(给类对象绑定属性)的方式有两种:

  1. 在类对象内部,但在方法之外:propertyname = propertyvalue

  2. 因为python是动态语言,所以可以在类外部动态的绑定属性,若属性已经存在就是对属性值进行更改:classname.propertyname  = propertyvalue

 

访问类属性的方式也有两种:

  1. 在类对象的内部(方法中) : classname.propertyname

  2. 在类对象的外部:classname.propertyname 或者 instancename.propertyname

因为类对象的所有实例对象都有一个指向类对象的指针,所以,类对象的所有实例对象也都可以访问类属性。

之所以添加'classname',是为了表明类属性被哪个类对象所绑定。

 

 

因为类属性可以通过classname.propertyname和instancename.propertyname来访问。当通过instacename.propertyname访问时,若指定实例对象中没有指定名称的实例属性,就会通过classname.propertyname来查找。所以当通过‘实例对象.属性名’的方式访问属性时,如果实例属性和类属性同名就会屏蔽类属性。

 

通过‘实例属性.属性名 = 属性值'的方式绑定属性时,这里的属性只表示实例属性(因为类属性没有这样的绑定方式),若已绑定就会更改属性值。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值