每天一点python——day91

#每天一点Python——91
#在之前的学习中,我发现类与对象这一节不适合分多批学习,所以我这一篇可能比较长,放松好心情,来到这一节的学习。
'''
类:指的是一种类别。像超市的酒水类,里面只有酒水,没有海鲜大米等。思想就相当于物以类聚,人以群分。
类就是由n个对象,抽取出属性和行为相像的的归纳总结。
例如人这个类别中,张三‘李四’王五都是一个个对象,他们共同的属性都是有姓名,民族,都有人的器官等等。他们都属于人这个类别
在Python中一切皆对象
我们常见的字符串对象‘hello’,’Python‘,‘world’他们都属于字符串类型
整数对象100,200,300、他们都属于整数类型
在Python中,不同的数据类型对应不同的类,我们可以用Python的内置函数type()查看对象的数据类型
'''
#例:用type()函数查看Python的数据类型
a=10
b=1.1
c='hello'
print(type(a),type(b),type(c))#我们查看a,b,c的数据类型
'''
输出结果如下:
<class 'int'> <class 'float'> <class 'str'>
clss就是类的意思
我们发现前面都是有一个class
class就是类的定义
int。float,str
就是数据类型
int就是整数类,float就是浮点类,str就是字符串类
他们都是Python给我们定义好的
我们也可以自己定义数据类型
'''
#在Python中,可以自定义数据类型
'''
自定义数据类型
语法结构为:
class 类名():
    pass
注意:类名是我们自己取的,要求首字母大写,后面()可写可省略
'''
#自定义数据类型
class Person():
    pass
#自定义人的类型,因为类当中没有任何东西,所以我们使用pass来替代保证语法不报错
class Dog():
    pass
#编写一个狗类
class Pig:
    pass
#编写一个猪类,我们来省略(),发现不报错
'''
刚刚我们不是编写了类吗?但是我们不能用
因为类是一个抽象的模板,在创建对象后,我们才可以使用
我们编写了一个人类,具体是哪个人我们不清楚,所以我们必须创建一个对象
如何创建对象呢?
语法格式:
对象名=类名()
'''
#类是模板,我们可以根据模板可以创建一个实例(对象)
#创建一个自定义类型的对象:
#刚刚我们不是创建了一个Person类吗?我们直接调用
ren=Person()#ren就是Person类型的对象,这样就创建好了
zhu=Pig()#zhu就是Pig类型的创建对象
#查看我们这两个对象类型是否正确,我们用内置函数type()查看
print(type(ren),type(zhu))
'''
输出结果如下:
<class '__main__.Person'> <class '__main__.Pig'>
这样就代表创建好了
'''



#类的组成
'''
前面我们实现了如何自定义一个类,但是自定义类里面具体的代码我们没有写,现在我们在写一些
类是由类属性,实例属性,实例方法,静态方法,类方法
类属性:直接定义在类中,在方法外的变量
实例属性:定义在__init__方法中,用self打点的一个变量
实例方法:定义在类中的函数,而且自带参数self
静态方法:使用装饰器@staticmethod修饰的方法
类方法:使用装饰器@classmethod修饰的方法

不管是类属性还是实例属性,最终都落在了变量上,变量的定义位置不同决定了它的名称。
'''
#如何定义类属性,实例属性
class Student():#自定义一个类
    school='XX学校'#类属性:定义在类里面,定义在方法外的变量【school='XX学校'就是一个变量,因为定义的位置变了,在类里面,所以它的名称就变成了类属性】
    def __init__(self,xingming,age):
        #初始化方法:必须由俩个下划线开始,两个下划线结束,名称必须叫做init。因为他是方法,所以可以传参,
        # 【一般只有self,后面的xingming age可以自己添加】[还需要注意def __init__(self,xingming,age):这个里面是def空格+双下划线]
        #  xingming和age是方法的参数,是局部变量,局部变量的使用范围仅仅只适用于当前这个方法
        #也就是说xingming和age的作用域在整个init方法里面
        #xingming和age这两个变量的值如果想在方法之外去使用,就需要定义类的实例属性
        self.name=xingming#左侧是实例属性,xingming就是局部变量这里就是将局部变量xingming的值赋值给了实例属性self.name
        self.age=age#实例属性和局部变量的名称可以相同,但是一定要记住左边带self的是实例属性,右边是局部变量
        #这样的话就定义完成了,但是这是在类里面还不能使用,我们需要创建对象后才可以使用
#仔细看,你会发现定义类里面的方法与定义函数差不多,只是因为他在类里面,所以叫法就不一样了,而且自带self参数

        #定义在类中函数叫做方法,自带一个self参数
    def show(self):#show就是我们定义的一个方法的名字
        print(f'我叫:{self.name},今年{self.age}岁了')#方法体:我不能直接用xingming,因为是局部变量,出了这个方法我们就用不到了,我们只能用self.name(实例属性)
        #这样一实例方法就定义完成了
        #接下来看静态方法,他也是方法,不过要使用装饰器@staticmethod去修饰【静态方法是不会自带self的,而小括号里面的参数你写就有,不写就没有】
    @staticmethod
    def sm():
            #print(self.name)我这里调用了实例属性,方法报错了,为了方便我直接注释了
        print('这是一个静态方法,在静态方法中,不能调用实例属性也不能调用实例方法')
        #接下来看类方法  自带一个cls参数,cls是class的缩写
    @classmethod
    def cm(cls):
        print('这是一个类方法,在类方法中,你也不能调用一个实例属性和实例方法')
#以上整个类就定义完成了,但是我们目前不能用,他只是一个模板,不能操作,如果想用,必须创建一个类的对象
stu=Student(xingming='ad',age=20)
#为什么传两个参数,因为def __init__(self,xingming,age):里面有两个形参,那self呢,他是自带参数,无需手动输入,只需要传你自己定义的就好了
#以上对象就创建完成了
#实例属性是使用对象名打点进行调用的
#对象名就是stu
print(stu.name,stu.age)
'''
输出结果:
ad 20
name和age就是我们的实例属性
本来是self.name和self.age
但是创建对象后,就需要使用对象名加点调用了
'''
#类属性:直接使用类名打点调用
print(Student.school)
'''
输出
XX学校
类属性是XX学校,要想调用就是类名打点
'''
#实例方法使用:对象名打点调用
stu.show()
'''
输出结果:
我叫:ad,今年20岁了
这里涉及到一个小知识:
在 Python 中,f-string 是一种方便的字符串格式化方法,它允许你在字符串中插入变量或表达式的值。
使用 f-string 格式化字符串时,你可以在字符串前加上字母 "f",然后使用大括号 {} 将要插入的变量或表达式包裹起来。在运行时,这些大括号中的内容将被替换为对应变量或表达式的值。
例如,在以下代码中:
python
name = "Alice"
age = 25
print(f"My name is {name} and I am {age} years old.")
输出将会是:
My name is Alice and I am 25 years old.
通过使用 f-string,你可以更简洁、直观地将变量的值插入到字符串中,避免了繁琐的字符串拼接或格式化操作。同时,你也可以在大括号中进行更复杂的表达式计算。
需要注意的是,只有在使用 Python 3.6 及以上版本时,才能使用 f-string。
如果你使用的是旧版本的 Python,你可以使用其他字符串格式化方法,如 str.format() 或 % 运算符。
但是,f-string 提供了更简洁、直观的语法,因此在新的代码中推荐使用它。
'''
#类方法:使用@classmethod,直接使用类名打点调用
Student.cm()
#静态方法直接使用类名打点调用
Student.sm()
'''
输出结果:
这是一个类方法,在类方法中,你也不能调用一个实例属性和实例方法
这是一个静态方法,在静态方法中,不能调用实例属性也不能调用实例方法
注意
类方法
类属性
静态方法都是使用类名打点进行调用的
与实例有关的,都是使用对象名打点调用的
'''
#每天一点Python——91

为了更直观,我把代码单独拎出来了

class Student():
    school='XX学校'
    def __init__(self,xingming,age):
        self.name=xingming
        self.age=age

    def show(self):
        print(f'我叫:{self.name},今年{self.age}岁了')
    @staticmethod
    def sm():
        print('这是一个静态方法,在静态方法中,不能调用实例属性也不能调用实例方法')
    @classmethod
    def cm(cls):
        print('这是一个类方法,在类方法中,你也不能调用一个实例属性和实例方法')
stu=Student(xingming='ad',age=20)
stu.show()

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值