成都9班-曾元 发表于 2021-11-21 21:40:22

22 python中的类与对象

# python中的模块应该包含哪些东西? ==》函数,常量,变量,类
'''
1、类:描述具有相同属性和方法的对象的集合
2、对象:通过类所创建的实体就是对象
3、实例化:根据类创建对象的过程
4、方法:一般,写在类的外面的叫函数,写在类的里面的叫方法
5、类变量:整个类所拥有的属性
6、实例变量:用来修饰实例本身。 实例就是对象,对象就是实例。
7、把变量理解为属性,把方法理解为行为
8、@符号:叫做装饰器,作用:不改变函数本身的情况下,用来添加上其他的功能
9、object理解为万物之源,需要继承object
'''

#创建一个类:
# class People(object):# 使用class作为关键字,类名需要首字母大写,新式类
#   head=1             # 这个是类变量
#   def __init__(self,name,age):   #构造函数,用来给实例或对象添加属性。以双下划线开头,代表私有的
#      self.name=name    # self.name 实例变量, self代表实例本身
#      self.__age=age    # self.__age=age 私有实例变量,不能在类的外部使用
#   def func1(self):    # 在类里面,如果不修改他的属性,那他默认为实例方法。是否可以不输入self??
#         print("我可以举重100公斤")
#         print(self.name+self.__age+"岁可以耍朋友")
#   @classmethod
#   def func2(cls):   # 这个叫做类方法,代表整个人类可以做的事情,cls代表class
#         print("我可以跑步")
#   @staticmethod
#   def func3():   # 这个叫做静态方法,理解为类方法,但是没有cls来表示
#         print("我是一个静态方法")
#   def __func4(self):      # 双下划线开头代表私有方法,只能够在类的内部使用,不能在类的外部使用。
#         print("这是一个私有方法")
#   def func5(self):   # 创建一个实例方法,return私有方法,然后在外部调用这个方法,就会得到私有方法
#         return self.__func4()   # 将私有方法return到新建的一个实例方法中,这是一个封装的体现
#   def func6(self):   # 创建一个实例方法,return私有变量,然后在类的外部调用这个方法,就会得到私有变量
#         return self.__age

# p=People("小王","18")#创建一个对象


# p.func1()# 对象调用实例方法,我可以举重100公斤,小王18岁可以耍朋友
# People.func1()# 类调用实例方法,会报错
# People.func1(p)# 类派出一个对象去调用实例方法,但是一般不这样使用,我可以举重100公斤
# p.func2()# 对象调用类方法#我可以跑步
# People.func2()# 类调用类方法#我可以跑步
# p.func3()# 对象调用静态方法#我是一个静态方法
# People.func3()# 类调用静态方法   #我是一个静态方法
# p.func4()   # 类外部,调用私有方法,会报错
# People.func4()# 类外部,调用私有方法,会报错
# p.func5()   #如果在类的外部调用私有方法,需要在类中进行封装,返回
# print(p.func6())#func6中有返回的私有变量#18


# 调用变量
# print(p.name)#对象调用实例变量小王
# print(p.age)   #报错,无法调用私有实例变量
# print(p.func6())#func6中有返回的私有变量#18
# print(p.head)#对象调用类变量 1
# print(People.name)#类调用实例变量,报错
# print(People.head)#类调用类变量 1


# class People:   #经典类,默认继承object
#   pass


# 类的特性:
# 1、封装:
# class People:# 经典类,默认继承object
#   def __init__(self):
#          pass
#   def set_name(self,name):# 创建一个实例方法,并且将获取到的值赋值给实例变量
#         self.name=name
#   def get_name(self):#谁调用这个方法,我就把这个实例变量返回给他
#         return self.name
#
# p=People()
# p.set_name("小明")
# print(p.get_name())

# 2、继承:
# 当自己的类中的方法不够使用了,可以去继承别的类。 被继承的叫做父类,继承的叫做子类。
# 子类对象可以调用父类的方法,父类对象不能够调用子类的方法
# 可以同时继承多个类,也可以继承之后再进行继承

# 第一种:同时继承多个类
# class Father(object):#object不是形式参数,是万物之源
#   def __init__(self):
#         pass
#   def rich(self):
#         print("我是一个富有的人")
#   def drink(self):
#         print("我是一个酗酒的人")
# class Mother():
#   def beautiful(self):
#         print("我是一个漂亮的人")
#
# class Son(Father,Mother):
#   def __init__(self):
#         pass
#   def young(self):
#         print("我是一个年轻的人")
#   def strong(self):
#         print("我是一个强壮的人")
#
# f=Father()   # 创建父类对象
# s=Son()   # 创建子类对象
# s.rich()#子类对象可以调用父类方法 我是一个富有的人
# s.drink()# 我是一个酗酒的人
# s.beautiful()#我是一个漂亮的人
# f.young()#父类对象不能调用子类方法,报错


# 第二种:继承之后再继承
# class Grandfather(object):    # object 不是形式参数,是万物之源
#   def __init__(self):
#         pass
#   def rich(self):
#         print("我是一个富有的人")
#   def drink(self):
#         print("我是一个酗酒的人")
# class Father(Grandfather):
#   def beautiful(self):
#         print("我是一个漂亮的人")
# class Son(Father):
#   def __init__(self):
#         pass
#   def young(self):
#         print("我是一个年轻的人")
#   def strong(self):
#         print("我是一个强壮的人")
# s=Son()
# f=Father()
# s.rich()    # 孙子类对象,调用爷爷类方法 我是一个富有的人
# f.rich()    # 父亲类对象,可以调用爷爷类方法我是一个富有的人
# s.drink()   # 孙子类对象,调用爷爷类方法我是一个酗酒的人
# s.beautiful()# 孙子类对象,调用父亲类方法我是一个漂亮的人
# s.strong()   # 孙子类对象,调用孙子类方法我是一个强壮的人


# 3、多态:当继承的类里面的方法,不满足子类的要求了,子类可以进行方法的重写。
# 如果调用重写的方法,会执行重写之后的方法
# class Animal(object):
#   def say(self):
#         print("欢迎来到动物世界")
#
# class Dog(Animal):
#   def talk(self):
#         print("汪汪")
#   def say(self):
#         print("hello")
#
# class Grandfather(object):
#   def __init__(self):
#         pass
#   def rich(self):
#         print("我是一个富有的人")
#   def drink(self):
#         print("我是一个酗酒的人")

# a=Animal()
# d=Dog()
# g=Grandfather()
# a.talk()# Animal是父类,无法调用子类Dog的实例方法,报错
# d.say()# 如果在子类中,没有对say方法进行重写,那么会调用父类中的say的方法 欢迎来到动物世界
# d.say()#如果在子类中,对say方法进行了重写,那么会调用重写后的方法hello

# a=Animal()
# d=Dog()   # Dog类继承于Animal类
# g=Grandfather()
# 判断对象是否属于这个类
# print(isinstance(a,Animal))#True
# print(isinstance(d,Animal))#True
# print(isinstance(g,Animal))#False
# # 判断第一个参数的类,是否继承于第二个参数的类
# print(issubclass(Dog,Animal))#True
# print(issubclass(Grandfather,Animal))# False

页: [1]
查看完整版本: 22 python中的类与对象