Python基础 定义类和对象(类和对象2)

简介: 简单类的创建方法,对象的创建方法,类的属性,如何修改类的属性,对象如何调用方法,类属性,类方法,静态方法的使用都在文章中又演示操作


 定义简单的类

面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了!

定义只包含方法的类

在python中,要定义一个只包含方法的类,语法格式如下:

用class定义类名

class 类名:

def 方法1(self,参数列表)  #方法的属性中有且仅有一个self
    pass
def 方法2(self,参数列表)   #类之外定义的def是函数,在类里面定义的def叫做方法,而且括号里必须要有self
    pass

class Student:

pass

方法的定义格式和之前学习过的函数几乎一样
区别在于第一个参数必须是self
创建对象
当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
对象变量名=类名()
第一个面向对象程序 需求: 小猫爱吃鱼,小猫要喝水

分析:
1.定义一个猫类(Cat)
2.定义两个方法ect和drink
3.按照需求--不需要定义属性

class Cat: #Cat为类的名称(类名),又一个或多个单词组成,每个单词首字母大写,其余字母小写

"""这是一个猫类"""
def ect(self):   #定义方法
    print("小猫爱吃鱼")
def drink(self):
    print("小猫要喝水")

tom=Cat() #创建类的对象

big_tom=Cat() 每个类可以有多个对象,每个对象都会开辟新的存储空间id

tom.ect() #对象调用类中封装的方法,对象名.方法名()
tom.drink() #对象调用类中封装的方法
使用self在方法内部输出每一只猫的名字

由哪一个对象调用的方法,方法内self就是哪一个对象的引用
1.在类封装的方法内部,self就表示当前调用方法的对象自己
2.调用方法时,程序员不需要传递self参数

在方法内部:
1.也可以通过self访问对象的属性
2.也可以通过self调用其他的对象方法

改造代码如下

class Cat:

def eat(self):
    print("%s 爱吃鱼"%self.name)

tom=Cat()
tom.name="Tom"
tom.eat()

lazy_cat=Cat()
lazy_cat.name="大懒猫"
lazy_cat.eat()
在日常开发中,不推荐在类的外部给对象增加属性
如果在运行时,没有找到属性,程序就会报错
对象应该包含有哪些属性,应该封装在类的内部
class Student:

def __init__(self,name,age):
    self.name=name
    self.age=age
    print("我的名字叫",name,"今年岁数是",age)

xiaoming=Student("小明",20)

xiaohong=Student("小红",18)
 类的创建

类的创建:

class Student:

native_place="吉林"  #类属性
def __init__(self,name,age):   #name,age为实例属性
    self.name=name
    self.age=age
def eat(self):
    print("我正在吃饭...")

#实例方法
def info(self):
    print("我的名字叫:",self.name,"年龄是:",self.age)
#类方法
@classmethod
def cm(cls):
    print("类方法")
#静态方法
@staticmethod
def sm():
    print("静态方法")

对象的创建,创建Student类的对象

stu1=Student("张三",20) #创建对象
stu1.info() #对象调用类方法
stu1.eat()
print("我的名字叫",stu1.name,"今年的岁数是:",stu1.age,stu1.eat)
print(stu1)
类属性、类方法、静态方法
类属性:类中方法外的变量成为类属性,被该类的所有对象所共享
类方法:使用@calssmethod修饰方法,使用类名直接访问的方法
静态方法:使用@staticmethod修饰主法,使用类名直接访问的方法
print(Student.native_place) #访问类属性
Student.cm() #调用类方法
Student.sm() #调用静态方法
stu3=Student("张三",20)
stu4=Student("李四",30)
print(stu3.native_place) #吉林
print(stu4.native_place) #吉林
Student.native_place="天津" #改变类属性
print(stu3.native_place) #天津
print(stu4.native_place) #天津

相关文章
|
18小时前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型:图像语义分割与对象检测
【7月更文挑战第15天】 使用Python实现深度学习模型:图像语义分割与对象检测
7 2
|
2天前
|
Python
`scipy.signal`模块是SciPy库中的一个子模块,它提供了信号处理、滤波、频谱分析等功能。这个模块包含了许多用于信号处理的函数和类,其中`butter()`和`filtfilt()`是两个常用的函数。
`scipy.signal`模块是SciPy库中的一个子模块,它提供了信号处理、滤波、频谱分析等功能。这个模块包含了许多用于信号处理的函数和类,其中`butter()`和`filtfilt()`是两个常用的函数。
11 0
|
2天前
|
机器学习/深度学习 缓存 安全
Python标准库中的`str`类型有一个`translate()`方法,它用于替换字符串中的字符或字符子集。这通常与`str.maketrans()`方法一起使用,后者创建一个映射表,用于定义哪些字符应该被替换。
Python标准库中的`str`类型有一个`translate()`方法,它用于替换字符串中的字符或字符子集。这通常与`str.maketrans()`方法一起使用,后者创建一个映射表,用于定义哪些字符应该被替换。
4 0
|
2天前
|
Python
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
11 0
|
3天前
|
Python
|
5天前
|
Python
关于Python的类的一些理解
关于Python的类的一些理解
|
5天前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
6天前
|
开发者 Python
Python函数参数定义中的这两个分隔符,还有人不知道吗?
python 函数的参数定义想必大家应该是非常熟悉的,有两种: • 位置参数(positional argument):根据函数在参数列表中的位置传递给函数的参数。 • 关键词参数(keyword argument):通过指定参数名称及其对应值传参的参数。
|
9天前
|
设计模式 Python
深度揭秘!Python元类:掌握它,让你的代码拥有创造类的能力
【7月更文挑战第6天】Python元类探秘:**元类是类的类,用于控制类的创建。通过定义元类,可自定义类的行为,如动态添加方法或改变继承结构。示例中,`my_metaclass`在创建类时添加`new_method`。元类强大且适用于高级编程,如动态修改、注册类或实现设计模式。理解并善用元类能提升Python编程技巧。
16 0
|
12天前
|
存储 Python
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考