Python 面向对象编程(一)基础

先了解几个术语:类,类对象,实例对象,属性,方法和 函数。
(一) .类、类对象和实例对象
类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义:

注意:

1. 类名后面有个冒号(python 语句后面多用冒号结束)。
2. 而在类外定义的函数一般没有同对象进行绑定,就称为函数。
3.类、类对象和实例对象区别 myclassName类,myclassName类对象, 实例对象。
         实例化一个对象:

实例对象       p = myclassName();


类中内置的方法

  在Python中有一些内置的方法,这些方法命名都有比较特殊的地方(其方法名以2个下划线开始然后以2个下划线结束)。类中最常用的就是构造方法和析构方法。

  构造方法__init__(self,....)在生成对象时调用,可以用来进行一些初始化操作,不需要显示去调用,系统会默认去执行。构造方法支持重载,如果用户自己没有重新定义构 造方法,系统就自动执行默认的构造方法。

  析构方法__del__(self)在释放对象时调用,支持重载,可以在里面进行一些释放资源的操作,不需要显示调用。

  class myclassName:
    myname='robot'

index = 0;                    
   
def __init__(self,n):

self.indexn = self.indexn +1;

self.age = n;     

print self.indexn;                
   
def getage(self):

return self.age;

def __del__(self):

self.indexn = self.indexn -1;

print self.indexn;

 

obj = myclassName(12);

print obj.getage();       


(二)属性
类属性 有 公有与私有之分。
class myclassName:
    myname                      (公有的  )
    __age                             (私有的 用双下线)
    .......
    方法
pass


注意:    1.类的内部用 self访问属性。
    2.公有属性也是直接用myclassName.myname 访问, 也可以实例化后  obj.myname 来访问。
    3.公有的属性也叫做类属性。类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和java中类的静态成员变量有点类似。对于公有的类属性,在类外可以通过类对象和实例对象访问。
   4.如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制                    屏 蔽 掉类属性,即引用的是实例属性,除非删除了该实例属性。
    5.实例属性是不需要在类中显示定义的可以直接在实例外设置。(类似javascript的 动态创建属性 因为是动态类,python的类默认都是继承Object类)
class myclassName:
    myname='robot'                    (公有类属性)
    __age=12                            (私有类属性 用双下划线)
    .......
    def getage()
    方法
pass
obj = myclassName();
obj.o_property   实例属性可以在实例后来设置
print obj.myname
obj.myname = 'robotpppppp'   (错,不应该用实例来修改类属性,注意4说明了)
myclassName.myname = 'robotxxxxxxxxxxxxx'  (对)
obj.__age (错)


(三)方法
方法有类方法、实例方法以及静态方法之分。方法也有公有与私有之分:方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的

类方法:是类对象所拥有的方法,需要用修饰器"@classmethod"来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以"cls"作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大部分人都习惯以'cls'作为第一个参数的名字,就最好用'cls'了),能够通过实例对象和类对象去访问。
class myclassName:
      myname = 'robot';
      __age = 12;
      @classmethod
      def mymethod(cls):
          return cls.myname;
      pass
      def mymethodPPP(cls,n)
 cls.myname = n;
      pass
obj = myclassName();
obj.mymethod()   
myclassName.mymethod();
注意:1..类方法还有一个用途就是可以对类属性进行修改。
            2.类方法对类属性修改之后,通过类对象和实例对象访问的类属性都会发生改变。


实例方法:在类中最常定义的成员方法,它至少有一个参数并且必须以实例对象作为其第一个参数,一般以名为'self'的变量作为第一个参数(当然可以以其他名称的变量作为第一个参数)。在类外实例方法只能通过实例对象去调用,不能通过其他方式去调用。
class myclassName:
      myname = 'robot';
      __age = 12;
      def mymethod(self):
          return self.myname;
      pass
obj = myclassName();
obj.mymethod();
myclassName.mymethod()       (错,实例方法只能实力对象调用)
 


静态方法:需要通过修饰器"@staticmethod"来进行修饰,静态方法不需要多定义参数。
class myclassName()
      myname = 'robot';
      @staticmethod
      def getp()
 retrun myclassName.myname;
obj.getp() (错误)
myclassName.getp();




(四)总结
1. 类属性和实例属性,如果在类方法中引用某个属性,该属性必定是类属性。
2. 如果在实例方法中引用某个属性(不作更改),并且存在同名的类属性,此时若实例对象有该名称的实例属性,则实例属性会屏蔽类属性,即引用的是实例属性,
若实例对象没有该名称的实例属性,则引用的是类属性;如果在实例方法更改某个属性,并且存在同名的类属性,此时若实例对象有该名称的实例属性,则修改的是实例属性,
若实例对象没有该名称的实例属性,则会创建一个同名称的实例属性。想要修改类属性,如果在类外,可以通过类对象修改,如果在类里面,只有在类方法中进行修改。
3. 从类方法和实例方法以及静态方法的定义形式就可以看出来,
    类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;
    实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。
   静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值