Python基础语法学习13

基础语法学习Day13

  • 编程思想
  • 类和对象
    • 1.什么是类什么是对象
    • 2.定义类
    • 3.定义对象(创建对象)
  • 类中的方法
    • 1.类的方法
    • 2.三种方法
  • 构造函数和init
    • 1.什么是构造函数
    • 2.__init__方法
  • 类中的属性
    • 1.什么是属性
    • 2.属性的分类
  • 对象属性的增删改查
    • 1.对象属性

编程思想

面向过程编程
遇到问题首先想到的是用什么样的逻辑和语法写什么代码能够实现这个功能(语法,逻辑)
函数式编程
遇到问题首先想到的是有没有一个已经存在的函数能够完成这个功能,如果有就直接调用这个函数,如果没有就定义一个能够实现这个功能的函数。(函数)
面向对象编程
遇到问题首先想到的是有没有一个对象它有这个功能,如果没有就去创建这个对象(类和对象)

类和对象

1.什么是类什么是对象

类就是拥有相同功能和相同属性的对象的集合;(某一类事物的统称,是抽象的概念)
对象就是类的实例(类具体的表现)

2.定义类

目的是表述清楚你是哪些相同功能,哪些相同属性的统称
语法:
class 类名:
    类的说明文档
    类的内容(方法,属性)

说明:
1.class – 关键字;固定写法
2.类名 – 程序员自己命名;
要求:
a.是标识符
b.不是关键字
规范:
a.采用驼峰式命名,并且首字母大写
b.见名知义:(看到名字大概知道这个类是哪种事物的统称)
c.不能使用系统的函数名,类名,模块名
3.类的说明文档 – 和函数说明文档的要求一样
4.类的内容 – 类的内容中主要包含类的方法(对象方法,类方法和静态方法)和属性(类属性,对象属性)

方法:方法就是定义在类中函数

3.定义对象(创建对象)

语法:
类()

类中的方法

1.类的方法

定义类就是描述清楚这个类拥有哪些相同的功能和属性的集合
类中的方法就是对类相同的功能的描述
方法就是定义在类中的函数,它分为三类:对象方法,类方法,静态方法

2.三种方法

(1)对象方法
怎么定义:直接定义在类中的函数就是对象方法
特点:自带参数self(如果使用对象去调用对象方法,对象方法中self不用传参,系统会自动将当前对象传给self)
怎么调用:对象.方法()
(2)类方法
怎么定义:在定义函数前加@classmethod
特点:自带参数cls(如果使用类去调用类方法,方法中的cls不用传参,系统会自动将当前类传给cLs))
cls指向当前类
怎么调用:类.方法()
(3)静态方法
怎么定义:在定义函数前加@staticmethod
特点:没有默认值参数
怎么调用:类.方法()

class Person:
    # ===============对象方法===============
    # eat就是对象方法
    # self:谁调用就指向谁
    def eat(self):
        print("吃")

    # sleep是对象方法
    def sleep(self):
        print("睡觉")

    # ===============类方法===============
    @classmethod
    def show_num(cls):
        print("44")

    # ===============静态方法===============
    @staticmethod
    def show_message():
        print("破坏")

# 注意:从语法的角度来看,不管是对象方法,类方法还是静态方法都可以使用类和对象调用

构造函数和init

1.什么是构造函数

函数名和类同名的用来创建的对象的函数/方法
a.函数名和类名同名
b.功能是用来创建对象的

python中,当我们在定义类的时候,系统会自动创建这个类的构造函数。
在这个构造方法中会自动调用__new__方法来创建对象,
并且用这个创建好的对象来调用__init__对对象进行初始化操作,最后才将对象返回

2.__init__方法

__init__是每个类中都有一个特殊的对象方法,是魔法方法(会被自动调用);
当创建类的对象的时候这个类中的__init__方法会被自动调用

在类中添加__init__方法,只需要保证方法名是__init__,方法是对象方法

# 当调用构造方法创建对象的时候,系统自动调用这个类中__init__方法
# 调用构造方法创建对象的时候,这个构造方法需不需要参数,需要几个参数,
# 看类中的__init__方法除了self以外需不需要参数,需要几个参数
class Dog:
    def __init__(self,x):
        print("init方法")
        print(x)

dog1=Dog(10)
dog2=Dog(x=10)

类中的属性

1.什么是属性

我们通过类中的属性来保存类相关的属性

2.属性的分类

类中的属性分为两种:类属性和对象属性
(1)类属性(类的字段)
a.定义:直接定义在类中的变量就是类属性
b.使用:类.属性
c.什么时候用:属性值不会因为对象不同而不一样的时候,就使用类属性
(2)对象属性
a.定义:在__init__方法中,以self.属性=值 的形式进行定义(属性自己命名,要求和规范和变量名一样)
b.使用:对象.属性
c.什么时候用:属性值会因为对象不同而不一样的时候,就使用对象属性

class Student:
    # num就是类属性
    num = 30


class Circle:
    pi = 3.1415926

    def s(self):
        return Circle.pi ** 2

    def __init__(self):
        self.r = 44


Circle.pi = 4
print(Circle().s())


class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    # 重写__repr__方法可以自定义对象的打印格式;这个方法的返回值就是对象的打印结果(返回值必须是字符串)
    def __repr__(self):
        # 打印谁,self就是谁
        return f"name:{self.name} age:{self.age} gender:{self.gender}"

对象属性的增删改查

1.对象属性

python类对象的属性是支持增,删,改,查

class Dog:
    def __init__(self, name, breed="土狗", sex="母狗", age=1):
        self.breed = breed
        self.sex = sex
        self.age = age
        self.name = name


dog1 = Dog("大黄", sex="公狗")
dog2 = Dog("宝贝", "哈士奇", age=3)

(1)查 – 获取属性值
对象.属性 – 获取对象指定属性的值
getattr(对象,属性名) – 获取对象指定属性的值()
getattr(对象,属性名,默认值) – 获取对象指定属性的值

print(dog1.name)
print(getattr(dog1, "name"))
print(getattr(dog1, "name", "无名"))

print(getattr(dog1, "color", "白色"))
# getattr可以根据变量的值动态获取指定属性的值
print(dog1.age)
value = input("属性名:")
print(getattr(dog1, value))

(2)增,改
对象.属性 = 值 – 如果属性存在就是修改对象属性的值;如果属性本身不存在就是添加属性
setattr(对象,属性名,值) – 如果属性存在就是修改对象属性的值;如果属性本身不存在就是添加属性

dog1.name = "小黄"
print(dog1.name)

dog1.color = "黄色"
print(dog1.color)

setattr(dog1, "name", "黄黄")
print(dog1.name)

setattr(dog1, "weight", 10)
print(dog1.weight)

(3)删
del 对象.属性 – 删除对象的指定属性
delattr(对象,属性名) – 删除对象的指定属性

del dog1.age
delattr(dog1, "name")

你可能感兴趣的:(python,类,编程语言,class)