python类

一、类的属性、方法

'''
#类的所有属性
vars(类实例)
'''
class Person(object):

    def __init__(self, name):
        self.name = name
    
    def get_name(self):
        return self.name

if __name__ == '__main__':
    one_person = Person('张三')
    
	'''
	#是否有属性
    hasattr(one_person, "name")
    #删除属性
    delattr(one_person, "name")
    #得到属性值
    getattr(one_person, "name")
    '''
    
    print(one_person.name)
    print(one_person.get_name())
	
	#类的属性
    print(vars(one_person))

二、类的私有属性、方法

在属性/方法前面加上’__‘表示为私有属性/方法,但python只是改了属性/方法的名称,改为了’_类名__属性/方法名’

'''
把方法变得和属性一样的使用方法:
    @property : 得到该方法的返回结果,不能传参
    @函数名.setter : 执行函数内容,函数名对应函数必须被@property装饰,
'''

class Person(object):

    def __init__(self, name):
        self.__name = name

    # 访问器 - getter方法
    @property
    def get_name(self):
        return self.__name

    # 修改器 - setter方法
    @get_name.setter
    def set_name(self, name):
        self.__name = name

    def __get(self):
        return self.__name

if __name__ == '__main__':
    one_person = Person('张三')

    print(one_person.get_name)
    one_person.set_name = '李四'
    print(one_person._Person__name)
    print(one_person._Person__get())

三、限制属性

class Person(object):
    '''
    __slots__为限制属性,定义其他属性会报错
    '''
    __slots__ = ['name','age']
    def __init__(self, name):
        self.name = name
        self.age = 18
        # self.gender = 'male'


if __name__ == '__main__':
    
    one_person = Person('张三')
    print(one_person.name)

四、静态方法

'''
静态方法:相当于类里的普通函数
用@staticmethod装饰
'''

class Person(object):
    def __init__(self):
        pass

    @staticmethod
    def show(name):
        return name


if __name__ == '__main__':
    print(Person.show('张三'))

五、类方法

'''
类方法:返回类的实例
用@classmethod装饰
'''

class Person(object):
    def __init__(self,name):
        self.name = name

    @classmethod
    def show(cls):
        '''
        cls:表示类对象
        '''
        return cls('张三')


if __name__ == '__main__':
    print(Person.show().name)

六、继承

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

class Person(object):
    def __init__(self,name):
        self.name = name
    def swimming(self):
        return '游泳'

class Student(Person):

    def __init__(self, name,age):
        super().__init__(name)
        self.age = age

    def play(self):
        return '玩'


if __name__ == '__main__':
    one_student = Student('张三',18)
    print(one_student.swimming())
    print(one_student.play())

多继承

'''
当一个子类有多个直接父类时,该子类会继承得到所有父类的方法,如果其中有多个父类包含同名方法时,排在前面的父类中的方法会“遮蔽”后面父类中的方法。
'''
class A(object):
    def __init__(self,num):
        self.B = num + 1


class B(A):
    def __init__(self,num):
        super().__init__(num)
        self.A = num


class C():
    def __init__(self,num):
        self.B = num

class D(B,C):
    def __init__(self, num):
        B.__init__(self, num)
        C.__init__(self, num)


if __name__ == '__main__':
    '''
    多继承涉及到类的遍历顺序
        python2 --> 深度优先
        python3 --> 广度优先
    '''
    #D类的搜索顺序
    print(D.__mro__)

    a = D(1)
    print(vars(a))

七、多态

子类可以重写父类的方法

class Person(object):
    def __init__(self,name):
        self.name = name
    def play(self):
        return '一个人在玩'

class Student(Person):

    def __init__(self, name,age):
        super().__init__(name)
        self.age = age

    def play(self):
        return '一个学生在玩'


if __name__ == '__main__':
    one_student = Student('张三',18)
    print(one_student.play())

八、抽象类

import abc #利用abc模块实现抽象类

class All_file(metaclass=abc.ABCMeta):
    all_type='file'
    @abc.abstractmethod #定义抽象方法,无需实现功能
    def read(self):
        '子类必须定义读功能'
        pass

    @abc.abstractmethod #定义抽象方法,无需实现功能
    def write(self):
        '子类必须定义写功能'
        pass



class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
    def read(self):
        print('文本数据的读取方法')

    def write(self):
        print('文本数据的读取方法')



t=Txt()

t.read()
print(t.all_type)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值