Python面向对象

  Python从设计之初就已经是一门面向对象的语言

  Python类:

    1)类定义:

class 类名:
def __init__(self, 参数, ...): # 构造函数,只在生成类的实例时被调用一次
...
def 方法名1(self, 参数, ...): # 方法1,方法的第一个参数是self,表示自身的实例
...
def 方法名2(self, 参数, ...): # 方法2
...

      实例化类:ClassName()

      类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性

      类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用

 

    2)类实例方法

      在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例,代表当前对象的地址,而self.class则指向类。

 

    3)继承

      子类的定义语法如下:

class sonClassName(fatherClassName1,fatherClassName2,fatherClassName3):
    <statement-1>
    .
    .
    .
    <statement-N>

    子类会继承父类的属性和方法

 

  4)类的私有属性

    __ filed:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用self.__field访问。

 

  5)类的私有方法

    __method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用,不能在类的外部调用。调用方式self.__method。

#!/usr/bin/python3
 
#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))
 
# 实例化类
p = people('runoob',10,30)
p.speak()

 

  6)类静态方法和类方法

    一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。

    而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用

class A(object):
  # 静态方法,既可以作为类的方法使用,也可以作为类的实例的方法使用
    @staticmethod
    def foo1(name):
        print 'hello', name
  # 类的实例方法
    def foo2(self, name):
        print 'hello', name
  # 类方法,cls作为第一个参数用来表示类本身. 在类方法中用到,类方法是只与类本身有关而与实例无关的方法,既可以作为类的方法使用,也可以作为类的实例的方法使用
    @classmethod
    def foo3(cls, name):
        print 'hello', name)

    Python静态方法和类方法的区别:

      静态方法:使用@staticmethod注解修饰,不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样;如果在静态方法中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名

      类方法:使用@classmethod注解修饰,也不需要self参数,但第一个参数需要是表示自身类的cls参数;因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码

 

  self和cls的区别:

     self 作为实例方法的第一个参数,表示当前类的实例

     cls 作为类方法的第一个参数,表示当前类

 

 

 

 

END.

posted @ 2022-01-10 23:19  杨岂  阅读(52)  评论(0编辑  收藏  举报