首页 > 其他分享 >任务11 面向对象基础

任务11 面向对象基础

时间:2022-11-25 15:47:36浏览次数:42  
标签:11 p1 Person 对象 面向对象 任务 func print 属性

一、理解面向对象

1、面向过程:

  • 面向过程是一种以过程为中心的编程思想
  • 其原理就是将问题分解成一个一个详细的步骤,然后通过函数实现每一个步骤,并依次调用。

2、面向对象:

  • 面向对象则是一种以对象为中心的编程思想
  • 是通过分析问题,分解出一个一 个的对象,然后通过不同对象之间的调用来组合解决问题
  • 建立对象的目的不是 为了完成某个步骤,而是为了描述某个事物在解决整个问题的过程中的行为
  • 基本特征:封装、继承、多态

二、类和对象(面向对象的组成部分)

  • 类是对一系列具有相同特征和行为的事物的统称
  • 对象是类创建出来的真实存在的事物
  • 开发中,先有类,再有对象

1、定义类

class 类名

class good:
    def func(self):
        print("我很棒")

self指的是实例化对象本身

2、创建对象(实例化)

class good:
    def func(self):
        print("我很棒")
g1=good()
print(good)
g1.func()

输出:

<class '__main__.good'>
我很棒

 

三、类和对象属性

 1、类属性

  • 所有实例化对象共同的属性
class Person:
    nose=1
    eye=2
    def func(self):
        print(f"这个人有{Person.nose}个鼻子,有{Person.eye}只眼")
p1=Person()
p1.func()

输出:这个人有1个鼻子,有2只眼

  • 在类的外面将属性进行更改
class Person:
    nose=1
    eye=2
    def func(self):
        print(f"这个人有{Person.nose}个鼻子,有{Person.eye}只眼")
Person.nose=10
Person.eye=20
p1=Person()
p1.func()

输出:这个人有10个鼻子,有20只眼

  • 一般我们不希望将属性可以更改的时候,我们会在定义类属性的时候在前面加上"__",将类属性变为私有类属性,只允许访问不允许修改
class Person:
    __nose=1
    __eye=2
    def func(self):
        print(f"这个人有{Person.__nose}个鼻子,有{Person.__eye}只眼")
Person.__nose=10
Person.__eye=20
p1=Person()
p1.func()

输出:这个人有1个鼻子,有2只眼

2、对象属性

  • 在自己定义的类中的属性
  • 经实例化就会成为实例特有的属性
class Person:
    def __init__(self,name,age):
        self.name=name
        self.age=age
六六六=Person('六六六',66)
七七七=Person('七七七',77)
print(六六六.name)
print(七七七.age)

输出:

六六六

77
  • 同类属性一样,对象属性也可以在前面加上"__",变为私有对象属性,只能在对象内部使用
 四、python中类的方法
  • 实例方法
  • 类方法 classmethod
  • 静态方法staticmethod
  • 动态绑定

1、实例方法

  • 在类中定义的方法默认都是实例方法
  • 特点:最少包含一个self参数,用于绑定调用此方法的实例对象
class Person:
    __nose=1
    __eye=2
    def func(self):
        print(f"这个人有{Person.__nose}个鼻子,有{Person.__eye}只眼")
p1=Person()
# 实例化调用
p1.func()

输出:这个人有1个鼻子,有2只眼

2、类方法

  • 用@classmethod修饰
  • 至少包含一个参数,类方法中通常将其命名为cls(class的缩写)
  • 在执行类方法时,会自动将调用该方法的类赋给cls
  • 当一个方法中只涉及到静态属性时,可以使用类方法

      (1)使用类名调用类方法

Person.fun1()
Person.fun2()

      (2)使用类对象调用类方法

p1=Person()
p1.fun1()

代码示例:

class Person:
    leg=2
    @classmethod
    def fun1(cls):
        print("正在调用类方法",cls)

    @classmethod
    def fun2(cls):
        print(cls.leg)

Person.fun1()
Person.fun2()

p1=Person()
p1.fun1()

输出:

正在调用类方法 <class '__main__.Person'>
2
正在调用类方法 <class '__main__.Person'>

 

3、静态方法

  • 用@staticmethod修饰
  • 类似函数
  • 静态方法定义在类的空间
  • 函数定义在程序所在的空间
  • 类的静态方法中无法调用任何类属性和类方法
  • 一般用于和类对象和实例对象无关的代码

     (1)类名调用

Person.func("六六六","66")

     (2)类对象调用

p1=Person()
p1.func("六六六","66")

代码示例:

class Person:
    @staticmethod
    def func(name,age):
        print(name,age)
# 使用类名调用静态方法
Person.func("六六六","66")
# 使用类对象调用静态方法
p1=Person()
p1.func("六六六","66")

输出:

六六六 66
六六六 66

 

4、动态绑定

  • 动态地绑定属性和方法

(1)动态绑定属性

p1.gender='female'
p2.gender='male'

(2)动态绑定方法

def sing():
    print("八八八")
p1.sing=sing
p1.sing()
p2.sing=sing
p2.sing()

代码示例:

class Person:
    __eye=2
    def __init__(self,name,age):
        self.name=name
        self.age=age
p1=Person('六六六',66)
p2=Person('七七七',77)
# 绑定属性
p1.gender='female'
p2.gender='male'

print(p1.name,p1.age,p1.gender)
print(p2.name,p2.age,p2.gender)
# 绑定方法
def sing():
    print("八八八")
p1.sing=sing
p1.sing()
p2.sing=sing
p2.sing()

输出:

六六六 66 female
七七七 77 male
八八八
八八八

 

五、python中类和对象的存储方式

(1)类名与类之间的关系

  • 类名(本质是指针)指向存储类的的区域

(2)对象属性/对象与类的基本内存关系

  • 对象里面存在了一个名class 的属性指向了对象本身
class Person:
   pass
print(Person.__name__)

输出:Person

  • 对象添加属性的时候,它并将属性直接 加到自己的内存里面,而是另外再开一片内存,用来存这个属性值,然后保存好这个属性值的 ID 号(地址)
  • 对象属性修改的时候,不会直接修改原内存的值,而是再开一块内存,将对象内属性对应的地址(ID 号)进行修改
  • 对象属性删除

(3)对象使用类属性

  • 对象首先通过__class 来访问到类,再通过类来访问类属性值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:11,p1,Person,对象,面向对象,任务,func,print,属性
From: https://www.cnblogs.com/0925-LFH/p/16922769.html

相关文章