博客列表 >python类(继承、构造函数)

python类(继承、构造函数)

CC
CC原创
2021年01月07日 16:39:52930浏览

类的定义

定义类:类名怎么定义?使用class 来定义一个类
class 类名:类名- -般需要遵守大驼峰命名法,每一个单词的首字母都大写

  1. class <类名>:
  2. class <类名>(object):
  1. class Student(object): # 关注这个类有哪些特征和行为
  2. #在_ init_ 方法里,以参数的形式定义特征,我们称之为属性
  3. def __init__ (self, name, age, height):
  4. self.name = name
  5. self.age = age
  6. self.height = height
  7. #行为定义为一个个函数
  8. def run(self):
  9. print('正在跑步')
  10. def eat(self):
  11. print('正在吃东西')
  12. #Student 类创立了两个实例对象s1,s2
  13. #Student() ==>会自动调用_ init__方法
  14. s1 = Student('小朋',18,1.75)
  15. s2 = Student('小美丽',17,1.65)
  16. s1.run()
  17. s2.eat()

self解释

  1. class Student(object):
  2. def __init__(self, x, y):
  3. self.name = x
  4. self.age = y
  5. # Student('张三',18) 这段代码具体做了什么呢?
  6. #1.调用__new__ 方法,用来申请内存空间
  7. # 2.调用_ .init_ 方法传入参数,将self 指向创建好的内存空间,填充数据
  8. # 3.变量s1也指向创建好的内存空间
  9. s1 = Student('张三',18)
  10. print('s1的名字是',s1. name)
  1. class Student(object):
  2. def __init__(self, x, y):
  3. self.name = x
  4. self.age = y
  5. def say_hello(self):
  6. print('大家好,我是', self.name)
  7. # Student('张三',18) 这段代码具体做了什么呢?
  8. # 1.调用__new__ 方法,用来申请内存空间
  9. # 2.调用_ .init_ 方法传入参数,将self 指向创建好的内存空间,填充数据
  10. # 3.变量s1也指向创建好的内存空间
  11. s1 = Student('张三', 18)
  12. s1.say_hello()
  13. print('s1的名字是', s1.name)
  14. print('----')
  15. s2 = Student('jack', 21)
  16. s2.say_hello()

所有类实例能共享类属性

  1. class renlei:
  2. #类属性,能被所有实例共享
  3. shengao=1.75
  4. def __init__(self):
  5. print('我是人')
  6. def say(self):
  7. print('能说')
  8. return"漂亮"
  9. zhonguoren=renlei()
  10. print(zhonguoren.say())
  11. print(zhonguoren.shengao)

魔法方法特点

1.不需要手动调用,会在合适的时机自动调用
2.这些方法,都是使用开始,使用 结束 3.方法名都是系统规定好的,在合适的时机自己调用

  • 构造方法
    1.构造方法:类开始实例化的时候被最先初始化的方法。
    2.定义类的构造方法使用: init 魔法关键字。
  1. class Person(object):
  2. #在创建对象时,会自动调用这个方法
  3. def __init__(self, name, age):
  4. print('_ init_ 方 法被调用了')
  5. self.name = name
  6. self.age= age
  7. p = Person(' zhangsan', 18)
  • 构造方法模板
  1. class Amiml:
  2. # 构造方法
  3. def __init__(self,lb):
  4. self.lb=lb
  5. def getlb(self):
  6. return self.lb
  7. amiml=Amiml("鸟类")
  8. print(amiml.lb)

继承

  1. class A(object):
  2. def demo_a(self):
  3. print('我是A类里的方法demo_ _a')
  4. class B(object):
  5. def demo_b(self):
  6. print( '我是B类里的方法demo_ _b')
  7. class C(A,B):
  8. pass
  9. c=C ()
  10. c.demo_a()
  11. c.demo_b()

如果子类存在构造方法,I继承关系成立后,最终的结果也如果子类存在构造方法,I继承关系成立后,最终的结果也

  1. class Amiml:
  2. # 构造方法
  3. def __init__(self,lb):
  4. self.lb=lb
  5. def getlb(self):
  6. return self.lb
  7. class Dog(Amiml):
  8. def __init__(self):
  9. print("汪汪")
  10. amiml=Amiml("鸟类")
  11. print(amiml.lb)
  12. dog=Dog()

添加实例属性

  1. class Person:
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. p = Person("皮皮", 1)
  6. # 动态添加属性
  7. # 1,以下是添加实例属性的两种方式
  8. p.address = "义乌"
  9. setattr(p, "gender", "男") # 为p对象添加了一个名为gender的属性,存储的值为“男”
  10. print("名字是%s 年龄是%d 地址是%s 性别是%s" % (p.name, p.age, p.address, p.gender))
  11. print("名字是%s 年龄是%d 地址是%s 性别是%s" % (p.name, p.age, p.address, getattr(p, "gender")))
  12. # 2,添加对象属性 类名.属性名
  13. Person.CLS_ID = 110
  14. print(p.CLS_ID)
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议