4.Python中的类

1. 类与实例

#类的定义
class Person(object):
    """定义一个Person类
    Person类具有的属性:性别
    Person类具有的功能:说话
    """
    sex='female' #类属性

    def __init__(self,name):
        """构造方法:在创建类实例时,初始化"""
        self.name=name #实例属性
        self.__age=100 #私有属性

    def hello(self,language):
        """自定义方法"""
        result={'name':self.name,'sex':self.sex,'language':language}
        return result

    def get_age(self):
        return self.__age

#类的使用
#创建实例对象,传入构造方法中规定的参数
p1=Person('sandy')
print('p1: ',p1)
#调用类中的自定义方法
print(p1.hello('普通话'))
#通过类方法访问类中的私有属性
print(p1.get_age())
#调用类的属性
print('p1.sex: ',p1.sex)
#调用实例的属性
print('p1.name: ',p1.name)

运行结果是:
在这里插入图片描述

  • 通过关键字class来声明类,class后面跟着类名,类名后面的括号里面跟着该类的父类
  • 类中的方法,第一个参数固定是self,它表示实例对象本身,通过self.XXX可以调用实例对象所拥有的的属性和方法
  • 通过类名(初始化参数)实例化一个对象,该初始化参数传给类中的构造方法__init__

2. 属性

类属性

在声明类后,就存在于内存中,能够通过类来直接访问

实例属性

只有在实例化后才存在,不能直接通过类来访问,只能通过实例对象访问

私有属性

命名时以两个下划线开头,不能直接通过实例调用,一般通过类的方法来访问

3. 方法

类中的方法第一个参数都是变量self,self表示调用此方法的实例化对象,类中的方法需要实例化后才能调用
但静态方法和类方法可以通过类直接调用

静态方法@staticmethod

  • 与类相关但又不需要改变类和实例状态的方法,这类方法可以声明为静态方法
  • 静态方法不需要访问类里的任何参数,所带的参数都是从外部传入的
  • 静态方法使用函数修饰符@staticmethod声明

类方法@classmethod

  • 类方法使用函数修饰符@classmethod声明
  • 类方法的第一个参数是表示自身类的cls参数,可以用来调用类的属性,类的方法
#类的定义
class Person(object):
    """定义一个Person类
    Person类具有的属性:性别
    Person类具有的功能:说话
    """
    sex='female'

    def __init__(self,name):
        """构造方法:在创建类实例时,初始化"""
        self.name=name #实例属性
    def hello(self,language):
        """自定义方法"""
        result={'name':self.name,'sex':self.sex,'language':language}
        return language

    @staticmethod
    def sing(song):
        print('sing: ',song)

    @classmethod
    def run(cls,distance):
        print('run: ',distance,'sex: '+cls.sex)

#调用方法
Person.sing("ABCDEFG") #类直接调用静态方法
Person.run('400') #类直接调用类方法

p=Person('Andy')
p.sing('HIJKLMN...') #通过实例调用静态方法
p.run('7000') #通过实例调用类方法

在这里插入图片描述

特殊方法

new:作用在构造方法创建实例之前
init:构造方法,作用于创建实例之时
str:作用于输出实例对象时
del:作用于销毁实例对象时

#类的定义
class Person(object):
    """定义一个Person类
    """
    def __init__(self,name):
        self.name=name
        print('__init__ function call')

    def __new__(cls, *args, **kwargs):
        print('__new__ function call')
        return super(Person,cls).__new__(cls)

    def __str__(self):
        print('__str__ function call')
        return self.name

    def __del__(self):
        print('__del__ function call')

#调用方法
print('*'*30)
p=Person('lin')
print('*'*30)
print(p)
print('*'*30)
del p

运行结果是:
在这里插入图片描述

4. 继承

  • 子类可以直接使用父类中定义的属性和方法
  • 子类的方法如果和父类的方法重名,子类会覆盖掉父类
  • 一般子类的构造方法都是先继承然后扩展,构造方法的继承格式是super(子类,self).__init__(参数1,参数2...)
class Person(object):
    """定义父类Person"""
    sex='female'
    def __init__(self,name):
        """父类的构造方法"""
        self.name=name

    def hello(self):
        print('name: '+self.name)

class Chinese(Person):
    """定义子类Chinese"""
    def __init__(self,name,color):
        """子类的构造方法:"""
        super(Chinese,self).__init__(name)  #先继承父类的构造方法
        self.color=color  #扩展子类的构造方法

    def hello(self):
        """复写子类中的方法"""
        print('I am Chinese,my name is【{name}】,my color is【{color}】'.format(name=self.name,color=self.color))

p1=Chinese('lin','yellow')  #调用子类的构造方法
print(p1.sex)  #子类调用父类的成员数据
p1.hello()  #子类调用父类的方法

运行结果是:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值