面向对象

一、class

  • class用来定义一个类(一个共同点的模型):
    1. 属性:

      • 函数:方法,人们喜欢把类中的函数叫方法
      • 变量:字符串,列表,元组,字典,集合
    2. 类:一个属性集合

    3. 实例:在内存中通过模型实例化创建的数据

      • 实例是一个容器一样,包含了所有类里的属性,而且是实际存在于内存中的
    4. 实例化:通过类名括号的方式

      class A:
          pass
      a = A() # 实例化
      
  • 面向对象的语法中,我们可以通过xxx.xxxx来获取到对应的属性
    mylist = [1,2,3,4,5]
    mylist.remove(3)
    print(mylist)   # [1,2,4,5]
    

例:

class User:   # 一个角色的类
   # self是一个将我们函数声明为单独的一个实例工作的参数
   # 每一个加了self的函数或者变量 都只能为自己的实例来工作
       # 在实例调用的时候,当前实例都会覆盖掉self
   # self用来指向当前工作实例
   # self是约定俗称的
   def __init__(self,name,sex,age):    # __init__是一个特殊内置函数
       self.name = name
       self.sex = sex
       self.age = age
       # 0:女人
       # 1:男人

   def run(self):
       print('%s的年龄是:%d' %(self.name,self.age))
c1 = User('小明',1,25)
   #c1.__init__(c1,'小明',1,25)
c2 = User('小红',0,28)
   #c2.__init__(c2,'小红',0,28)
c3 = User('小兰',1,18)
   #c3.__init__(c3,'小兰',1,18)

print(c1.name)  # 小明
print(c2.name)  # 小红
print(c3.name)  # 小兰

c1.run()  # 小明的年龄是:25
c2.run()  # 小红的年龄是:28
c3.run()  # 小兰的年龄是:18
  • Python中处处皆对象

二、 init

init函数为每一个实例进行数据的初始化工作
初始化函数 就是为了给实例创建属于自己的变量
init函数在实例化过程中自动调用,不需要你手动的来调用
init函数不允许有返回值,一旦有返回值,那么就报错啦
TypeError: init() should return None, not 'int'
类型错误:改函数必须返回一个None,而不是int

三、self

  1. self是一个将我们函数声明为单独的一个实例工作的参数
  2. 每一个加了self的函数或者变量 都只能为自己的实例来工作
  3. 在实例调用的时候,当前实例都会覆盖掉self
  4. self用来指向当前工作实例。self是约定俗称的命名,你也可以叫别的,但是一般都叫self

四、面向对象属性探究

cls用来指向类,self用来指向实例
  • 类的普通函数
# 类的普通函数只能被类所使用
    # 不能访问类变量及实例变量
class A:
    place = '地球'
    def __init__(self):
        self.name = '人'

    # 类的普通函数
    def func():  # 函数没有任何参数
        print('哈哈哈哈')
        print(place)  #普通函数不能访问类变量
        print(name)   #普通函数不能访问实例变量

a = A() # func

a.func() #实例调用函数!实例在调用函数的时候,首先会把自己作为第一个参数传递
    # TypeError: func() takes 0 positional arguments but 1 was given

A.func()  #哈哈哈哈
  • 类的高级函数
# 类的高级函数
   实例和类均可访问
   可以访问类的变量
   不可以访问实例的属性
class A:
    place = '地球'
    def __init__(self):
        self.name = '人'
        # 实例的东西只有实例能访问

    # 类的高级函数
    @classmethod  # 默认的必须要有一个参数
    # cls参数用来指向当前的类!
    def g_func(cls):
        print(cls.place)

a = A()
print(a.name)    #人  # 实例的东西只有实例能访问
a.g_func()        #地球
A.g_func()        #地球
  • 类的静态函数
# 类的静态方法
#   首先无法访问类的变量,没有指向当前使用类的指针
#   实例和类均可调用
#   不可以访问属于实例的属性
class A:
    @staticmethod  #类似与类的普通函数
    # 不需要cls这样的额外参数
    def s_func():
        print('绘声绘色')
a = A()
a.s_func()   #绘声绘色
A.s_func()   #绘声绘色

** 实例之间可以通过静态方法@staticmethod 以及高级方法@classmethod 进行数据通信

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容