美文网首页
Python中类、对象和继承相关知识

Python中类、对象和继承相关知识

作者: 锤子爱砸房子 | 来源:发表于2017-10-27 21:14 被阅读0次

定义类并创建对象

在Python中定义类的写法为:class 类名:即可定义出一个类(注意:类名首字母大写)

由类创建对象的写法为变量名 = 类名()

Python中的属性

Python中的属性可分为两类:

1.类属性:由类来维护的属性,对象在访问这种属性时,访问的是同一个值(即,对象的共有财产)

2.实例属性:通过类创建出来的对象拥有,每个对象都维护自己独有的属性

可以将类属性理解为公有属性,实例属性理解为私有属性

类属性写法:直接在类中添加属性名和属性值

class Student:
    country = 'china' # 类属性
stu1 = Student()

实例属性写法:实例属性定义在__init__函数里面,且该函数接收的第一个参数(一般写为self)是指针类型且永远指向该类创建出来的某个对象(即,通过类创建对象的时候,指针指向就确定了),函数接收的其它参数为创建对象时所需的形参

class Student:
    country = 'china'
    def __init__(self, name, age):
        self._name = name # 实例属性_name
        self._age = age # 实例属性_age
stu1 = Student('李四', '18')

__init__函数在调用类创建对象过程中会自行调用执行,不需要手动调用__init__函数

Python中的方法

Python中的方法可分为三类:

1.类方法:属于类的方法,由类来维护(对象的公有财产)

2.实例方法:属于对象的方法,由对象自己维护的方法(对象的私有财产)

3.静态方法:函数占据了类的命名空间,调用时需要通过类名+方法名才能调用。静态方法和通过该方法创建出来的对象没有任何关系

可以将类方法理解为公有方法,实例方法为私有方法

只有是没有调用过类、对象下的属性,就可以声明为静态方法

类方法的写法:通过系统装饰器@classmethod声明函数为类方法,且该函数接收的第一个参数(一般写为cls)是指针类型,指向的是类本身,类方法只能访问类属性,不能访问实例属性。函数接收的其它参数为创建对象时所需的形参

    @classmethod
    def say(cls):
        print('我来自:' + cls.country)
        
        # print('我来自:' + cls._age)
        # 报错:AttributeError: type object 'Student' has no attribute '_age'
        
stu1.say() # 我来自:china

实例方法的写法:直接在类里添加函数,不需要装饰器修饰,其它写法和类方法一样,第一个参数一般写为self用以区分。实例方法既访问类属性,也能访问实例属性

    def hello(self):
        print('我的祖国是:' + self.country)
        print('我叫:' + self._name)

stu1.hello() # 我的祖国是:china    我叫:李四

静态方法的写法:通过系统装饰器@staticmethod声明函数为类方法

    @staticmethod
    def soy():
        print('我是打酱油的')
        
Student.soy() # 我是打酱油的

创建一个简单的类

class Student:
    country = 'china'
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @classmethod
    def say(cls):
        print('我来自:' + cls.country)

    def hello(self):
        print('我的祖国是:' + self.country)
        print('我叫:' + self._name)

    @staticmethod
    def soy():
        print('我是打酱油的')

stu1 = Student('李四', '18')
stu1.say()
stu1.hello()
Student.soy()

特性:property

特性作用及写法

作用:如果调用特性,则用户只能访问,不能设置;隐藏真实的实例属性,防止用户乱更改或误操作

写法:通过系统装饰器@property声明函数

class Circle:
    def __init__(self, r):
        self._r = r
        
    @property
    def r(self):
        return self._r

cir = Circle(10);
print(cir.r)

设置器作用及用法

作用:专门提供给特性使用,用来修改特性的值

写法:通过系统装饰器@特性名.setter声明函数

    @r.setter
    def r(self, num):
        if type(num) is int:
            self._r = num
        else:
            print('请设置整数值')
            
cir.r = 20

删除器作用及写法

作用:通过del删除某个特性时,如果定义了删除器,该操作会执行删除其中的代码

写法:通过系统装饰器@特性名.deleter声明函数

    @r.deleter
    def r(self):
        print('can not delete')
        
del cir.r # 不加删除器会报错:AttributeError: can't delete attribute

属性私有化

让当前类的私有属性不会被子类继承到

Python中私有化机制:是属性名改写。在所有需要私有化的属性前添加__,则该属性名就会变成:_类名__属性名

class Student:
    def __init__(self):
        self.__name = '张三'

    def say(self):
        print('hello,我是' + self.__name)

stu = Student()
stu.say();
print(stu._Student__name)
# print(stu.name) 报错:AttributeError: 'Student' object has no attribute 'name'

继承

声明继承关系:在子类名后跟小括号,小括号里是要继承的父类名

注意:

1.在继承父类实例属性时,要先手动调用父类的init函数

继承关系中的init方法的执行逻辑:在子类没有实现init方法时,会触发父类中的init执行;如果子类实现了init,不会触发父类的init执行

2.在子类复写父类时,要先手动调用父类相应的方法

class A:
    def __init__(self):
        self.name = 'zhangsan'
        print('我是父类的init')
    def say(self):
        print('我是父类')
# 声明继承关系:在子类名后跟小括号,小括号里是要继承的父类名
class B(A):
    def __init__(self):
        # 手动调用父类的init函数
        A.__init__(self)
        print('我是子类的init')
    def bSay(self):
        print('我是子类')
        
    # 在子类中复写父类
    def say(self):
        A.say(self)
        print('我是复写的新数据')

b = B()
print(b.name)

相关文章

  • Python中类、对象和继承相关知识

    定义类并创建对象 在Python中定义类的写法为:class 类名:即可定义出一个类(注意:类名首字母大写) 由类...

  • 22.Python编程:封装、继承、多态

    前面学习了面向过程和面向对象的概念,又学习了Python中类和对象的相关知识,其中面向对象最大的特征是:封装、继承...

  • python语法入门五

    类和对象 类和对象 基础 继承:python为多继承 类、类对象和实例对象 当实例对象声明后,再删除类对象,那么该...

  • 【Python】类

    知识点 类的定义 对象初始化 实验内容 定义简单的类 __init__ 方法 Python 中的继承 多继承 删除...

  • Scala语言入门二(对象)

    讲述Scala中的面向对象相关知识点 一、特征 封装:属性和方法封装在类中 继承:父类和子类的一个关系 多态:父类...

  • Python面向对象编程

    类相关知识 对象相关知识 类属性增删改查 实例属性增删改查 对象与实例属性 静态属性 类方法 静态方法 组合 继承...

  • python面向对象

    面向对象的三大特性是指:封装、继承和多态python中类分为经典类和新式类,如果一个类继承了多个类,那么其寻找方法...

  • python自定义功能之面向对象

    本章主要内容 类与对象 定义和使用类 类的属性和方法 类的继承 类的方法重载 总结: python中的类与对象与J...

  • 22、错误和异常

    上集回顾: 类的定义 实例对象 继承 上集学习了类的相关知识,掌握了如何去定义一个类、如何实例化类的对象以及使用和...

  • 12. 面向对象(继承/接口/抽象)

    [TOC] 面向对象 继承与派生 继承 什么是继承?继承是一种创建新的类的方式 在python中,新建的类可以继承...

网友评论

      本文标题:Python中类、对象和继承相关知识

      本文链接:https://www.haomeiwen.com/subject/czidpxtx.html