python面向对象基础 -定义类和对象

面向过程和面向对象

  • 面向过程:(如何一步一步的做)
    • 强调的是功能行为
    • 关注的是解决问题需要哪些步骤
  • 面向对象:(找会做的对象来做)
    • 将功能封装进对象,强调具备了功能的对象
    • 关注的是解决问题需要那些对象

定义类的语法:

class 类名():  
    类体

类名后面的括号可以不写,但是如果有继承父类的话就一定要加上,类体中包含 属性(特征)和方法(功能)
实例化对象语法:对象名 = 类名()

# 创建类 - 人
class Person():
    # 属性
    name = 'bobo'
    age  = 18
    sex = 'woman'
    role = 'tester'
    # 方法
    def work1(self):
        print("WEB testing")

    def work2(self):
        print("APP testing")
   
   # 实例化对象
person1 = Person()

# 对象使用类中的属性

# 使用属性
name = person1.name
print("name:",name)
# 修改属性
person1.name = 'bobo_update'
print("修改后的name:",person1.name)

# 对象使用类中方法
person1.work1()
person1.work2()

构造函数

定义:
在python类中,def __init__函数(参数) 可以为类实现初始化的作用
__init__方法是python已经定义好的,只要调用即可,在类中两个下划线开头的函数是生命该属性为私有,只能在类的内部使用
实例化对象,会自动调用__init__方法,对于init中自定义的参数还是要在这传入,self不需要传值
语法:实例名 = 对象名(参数)

self:类中的方法都是通过对象执行的,并且对象执行这些方法都会将对象空间传给方法中的第一个参数self,
self其实就是类中方法的第一个位置参数,只不过解释器会自动将调用这个函数的对象传给self,self就代表对象。

class Person1():
    def __init__(self,name,age,sex,role):
        self.name = name
        self.age = age
        self.sex = sex
        self.role = role
    
    def work3(self):
        print("work3")

    def work4(self):
        print("work4")
      
# 实例对象
person1 = Person1('bobo1',19,'man','test001')
# 对象使用属性
name = person1.name
age = person1.age
print("name:",name)
print("age:",age)
# 对象使用方法
person1.work3()

属性

类中属性

  • 属于整个类的属性特征 定义在类的中间,不是在函数中
  • 公有属性 在类中、类外(子类)都可以用
  • 私有属性 以__开头 只在类中使用
  • 调用: 类名.属性名

实例属性

  • 实例对象的属性特征, 定义在构造方法中的属性
  • 公有实例属性 在类中、类外(子类)可以使用
  • 私有实例属性 以__开头的属性 只在类中使用
  • 调用:
类外边:对象名.属性名
类中:self.属性名    self == 对象
class Person1():
    height = 180
    __weight = 120
    print("类中私有属性 weight:",__weight)
    def __init__(self,name,age,sex,role):
        self.name = name
        self.age = age
        self.sex = sex
        self.role = role
    
    def work3(self):
        print("work3")
        print("类中使用属性:",self.role)

    def work4(self):
        print("work4")
      
# 实例对象
person1 = Person1('bobo1',19,'man','test001')
# 对象使用属性
name = person1.name
age = person1.age
print("name:",name)
print("age:",age)
# 对象使用方法
person1.work3()
# 类属性的使用
height = person1.height
print("类中属性 height:",height)
# 实例属性
print("类外边使用实例属性:",person1.name)

方法

实例方法

  • 实例方法:特征是第一个参数是self ,只能被实例对象调用
  • 共有实例方法:在类中,类外,子类中都可以调用的方法 对象名.实例方法名
  • 私有实例方法:在类中调用的方法 self.实例方法名
class Person2():
    # 共有
    def work1(self):
        print("共有实例方法work1")
    # 私有
    def __work2(self):
        print("私有实例方法work2")

    def role(self):
        self.__work2()  # 在类里调用私有实例方法
        self.work1() # 在类里调用共有实例方法
        print("共有实例role")



# 共有实例方法在类外调用
p1 = Person2()
p1.work1()
p1.role()
# 私有实例在类外调用
p1.__work2()  # 报错 'Person2' object has no attribute '__work2'

类方法

  • 类方法:特征是第一个参数是cls,cls代表类本身
  • 装饰器 @classmethod
  • 可以被类或者类的实例对象调用

静态方法

  • 静态方法:特征是没有默认参数
  • 装饰器 @staticmethod
  • 可以被类或者类的实例对象调用

属性方法

  • 装饰器 @property
class Person2():

    @classmethod
    def class_method(cls):
        print("class method")
        
    @staticmethod
    def static_method():
        print("static method")
        
    @property
    def property_method():
        pass

p1 = Person2()

p1.class_method()
Person2.class_method()

p1.static_method()
Person2.static_method()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值