美文网首页
01.14 - 类中添加属性和方法

01.14 - 类中添加属性和方法

作者: xxxQinli | 来源:发表于2019-01-14 17:21 被阅读0次

添加方法

  • 很简单,直接在子类中声明新的方法就行了,但是父类用不了,只能在子类或者子类的子类中使用

重写方法

在子类中重新实现父类的方法

  • 完全重写
    子类先在当前类找方法,若有则调用,若没有则在父类中找,一直找到object基类
  • 部分重写
    用super().eat(food), super为父类,后面执行的父类中的方法,先调用父类的方法,再实现剩下的方法,super后的括号一定不能少

类中函数的调用过程

回到函数声明的位置:先看当前类中是否有方法,如果有就直接调用,如果没有就去看父类中有没有这个方法。一直向上找到object,如果还是没有,则崩溃报错

添加属性(类的字段与对象属性)

  1. 类的字段
    直接在子类中声明新的字段
  2. 添加对象属性:
    对象的属性其实是通过继承init方法继承下来的
    在子类的init方法要用super().init(),来继承父类的属性,不加的话会重新覆盖掉父类中的方法
class Ql_Person(object):  # 
    """ 
    类说明文档:
    """
    num = 61

    def __init__(self, name = '', age = 0, sex = '男'):
        """
        函数说明文档:
        """
        self.name = name
        self.age = age
        self.__sex = sex 

    def ql_Eat(self, food):  #
        """
        函数说明文档:
        """
        print('%s在吃%s' % (self.name, food))
    
    @classmethod
    def ql_Show_Num(cls):  #
        """
        函数说明文档:
        """
        print('人类数量%s' % cls.num)

class Ql_Stu(Ql_Person):  # 
    """ 
    类说明文档:
    """
    num = 30
    num2 = 100
    def ql_Stu_Study(self):  #
        """
        函数说明文档:
        """
        print('%s在写代码' % self.name)

    @classmethod
    def ql_Show_Num(cls):
        print('学生数量: %d' % cls.num)
    
    def ql_Eat(self):  #
        """
        函数说明文档: 重点!!!
        """
        super().ql_Eat('栗子') #   调用父类中的函数
        print('吃饱了')

def main():
    p1 = Ql_Person('张三')
    stu1 = Ql_Stu('李四')
    stu1.ql_Stu_Study()
    stu1.ql_Eat()
    print(p1._Ql_Person__sex)  
    p1.ql_Show_Num()
    stu1.ql_Show_Num()
    print(stu1.num2)

class Ql_Animals:  # 
    """ 
    类说明文档:
    """
    def __init__(self, age):
        """
        函数说明文档:
        """
        self.age = age
        self.type = '爬行'
        self.color = '灰色'

class Ql_Dog(Ql_Animals):  # 
    """ 
    类说明文档:
    """
    def __init__(self, age):
        self.name = '啊狗'
        super().__init__(age)




def main():
    dog1 = Ql_Dog(20)
    print(dog1.type, dog1.color)
    dog2 = Ql_Dog(30)
    print(dog2.name)

#练习:
#声明人类的属性:名字,年龄,性别
#声明学生类有属性:名字,年龄,性别,学号,分数
#要求:创建人的对象的时候,名字必须赋值,性别可以赋值也可以不赋值,年龄不能赋值,
# 创建学生对象的时候,名字可以赋值可以不赋值,学号必须赋值,分数和性别年龄不能赋值

class Ql_Person:  # 
    """ 
    类说明文档:
    """
    def __init__(self, name, sex = None ):
        """
        函数说明文档:
        """
        self.name = name 
        self.sex = sex
        self.age = None

class Ql_Stu(Ql_Person):  # 
    """ 
    类说明文档:
    """
    def __init__(self, num, name = ''):
        """
        函数说明文档:
        """
        super().__init__(name)
        self.num = num
        self.score = None

def main1():
    stu1 = Ql_Stu(1)
    print(stu1.__dict__)

相关文章

  • 01.14 - 类中添加属性和方法

    添加方法 很简单,直接在子类中声明新的方法就行了,但是父类用不了,只能在子类或者子类的子类中使用 重写方法 在子类...

  • OC类目、延展

    类目: 定义:为现有工程中的类和系统类添加新的方法 作用:在类目中添加新的方法及属性和在原类中添加方法和属性是一样...

  • Category 和 Extension 的区别.

    类 Extension 可以为类添加属性和方法。使用格式. 类 Category 只能添加方法不能添加属性,添加属...

  • 在iOS中分类和类中添加属性和方法的区别

    分类和类都可以添加方法和属性 属性分类通过runtime添加属性类直接添加 方法添加方式一样 生成 类中生成的有:...

  • OC中分类的实现原理

    OC中为类添加一个分类(Category)可以实现为类添加对象方法、类方法、添加属性(添加的属性不生成成员变量)、...

  • python学习笔记-(4)面向对象

    类定义格式 添加和获取对象属性 类外面添加对象属性 类外面获取对象属性 类里面获取对象属性 魔法方法 __init...

  • 二十一:Python之动态添加属性方法

    一:动态添加属性方法 动态添加属性:类属性,成员属性 动态添加方法:成员方法,类方法,静态方法 动态添加对象方法需...

  • Objective-C关联对象的实现

    目的 在 NSObject 类中,添加 name 属性。 方案 利用 runtime 的相关方法: 动态添加属性 ...

  • iOS 类拓展与分类以及关联对象

    1、类拓展是匿名的分类。2、类拓展可以为类添加属性和方法(类拓展添加的属性和方法是私有的)。3、类拓展在编译时作为...

  • 动态添加属性

    动态向类中加入属性 (未实现的方法并没有在类的MethodList)在分类中只能添加方法,不能添加属性,在分类中声...

网友评论

      本文标题:01.14 - 类中添加属性和方法

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