Python类对象

  1. 类的简介
    (类相当于一张图纸)
    类也是一个对象
    类就是一个用来创建对象的对象
    类是type类型的对象,定义类实际上就是定义了一个type类型的对象
    (类中查找规则,会先从对象本身查找,如果对象中没有,会向类中查找)

(创建一个类)

class first_class:
	pass
#语法: class 类名:
#			代码块

(创建一个对象)

class first_class:
	pass
a = first_class()

可以向对象中添加变量,对象中的变量称为:属性
语法 对象.属性名 = 属性值

class first_class:
	name = "xiaoming"
a = first_class()
a.name = "xiaozhang"

此时a对象中会有一个name属性,但并没有修改类中name的属性


对象中的函数称为:方法
调用方法 对象.方法名()

class first_class:
	def function_one(self):
		print("first function")
a = first_class()
a.function_one()

此时屏幕上显示:first function


  1. self参数

(在方法调用时,会默认传递调用此方法的对象,所以必须有一个想对应的形参对其进行接收)

class first_class:
	def function_one(self):
		print("first function")
a = first_class()
a.function_one()

当a调用function_one()时,会默认将a对象作为实参传给function_one


实际上所有的事物都是由两部分组成
1.数据(属性)
2.行为(方法)


  1. isinstance函数

语法: isinstance(对象,类)
作用:判断一个对象是否属于指定的类

class first_class:
	pass
a = first_class()
result = isinstance(a,first_class)

result值为:Ture 因为a对象是又first_class类创建的


  1. 特殊方法
    特殊方法在特殊时候自动调用,起特殊作用

__ init __ 方法
(在创建对象时调用,用于初始化对象属性)

class first_class:
	def __init__(self,name):
		self.name = name
a = first_class("xiaoming")

创建对象时 必须输入必要参数 否则无法创建对象


  1. 封装 (面向对象三大特征之一)
    通过 对象.属性 的方式修改属性值,会使数据非常不安全
    (通过封装可以增加数据安全性)(防君子不防小人)

方法一
定义 getter 和 setter方法 对属性值进行修改
在修改的同时可以进行其他操作
可以使属性值不能任意修改,且修改不能为任意值

class first_class:
	def __init__ (self,name,age):
		self.name = name
	def setter_name (self,name):
		if isinstance(name,str):
			self.name = name
			print("修改成功")
		else :
			print("修改失败,修改值的类型错误")
a = first_class("xiaoming",18)

此时name的值 只能为字符串, 且只能修改name值


方法二
可以对对象的属性使用双__下划线开头 对其进行隐藏
双下划线的属性是对象的隐藏属性,隐藏属性只能在类的内部访问,无法通过对象访问

class first_class:
	def __init__(self,name):
		self.__name = name

此时__name属性无法通过外部访问(理论上)
(实际上) __name 被python改成了另一种形式 _first_class__name
所有私有属性 __属性名 都被python改成了另一种形式 _类名__属性名

class first_class:
	def __init__(self,name):
		self.__name = name
a = first_class("xiaoming")
a._first_class__name = "xiaozhang"

此时a对象中__name的值被修改为:xiaozhang


方法三:
_属性名 的方式提醒用户此方法为私有方法,不能随意更改


  1. property装饰器
    作用:将类中的函数变成只读属性调用
    可结合getter,setter,del等方法一起使用
    (这一块我也没太搞懂…)
class first_class:
	def __init__(self,name):
		self._name = name
	@property
	def name(self):
		return self._name
	@name.setter
	def name(self,name):
		self._name = name
a = first_class("xiaoming")
a.name = "xiaozhang"
print(a.name)

这样使用使a.name作为getter方法使用
a.name = xxx 作为setter方法使用
调用方法和属性一样 使其方便快捷


  1. 继承(面向对象三大特征之一)
    作用:提高代码复用性,避免代码的重复性
    语法: class 类名(父类):
    (所有类的父类都为object类)
class Person():
	name = "xiaoming"
	def eat(self):
		print("吃")
	def drink(self):
		print("喝")
	def play(self):
		print("玩")
class police(Person):
	def arrest(self):
		print("抓小偷")
a = police()
a.eat()
a.drink()
a.name

此时a对象不仅能调用police类里的方法 也可以调用Person类的方法,属性
(子类将继承父类中方法和属性)


方法重写
当子类中的方法或属性与父类中的方法或属性名称相同时
子类中的方法或属性会覆盖父类的方法或属性

class first_class():
	name = "xiaoming"
	def __init__(self):
		print("hello world",end="")
class second_class(first_class):
	name = "xiaozhang"
	def __init__(self):
		print("hello python",end="")
a = second_class()
print(a.name)

屏幕中显示:hello pythonxiaozhang
(方法和属性调用时 会先从当前类寻找,如果没有找到会从当前类的父类中寻找,直到找到为止,如果都没有,则报错)


多重继承
(一个类中继承多个父类,会使子类同时拥有多个父类,并且会获取到所有父类的方法,如果继承多个父类,其寻找的方法,会从第一个父类寻找,再寻找第二个,以此类推)

class A():
	def test(self):
		print("hello world")
class B():
	def test(self):
		print("hello python")
class C(A,B):
	pass
a = C()
a.test()

此时屏幕输出:hello world


super()函数
(子类会继承父类中的方法,包括特殊方法,此时如果想在父类的特殊方法上添加功,不重复代码,而又不违背ocp原则,此时可以用到super()函数)


当不用super()函数时:

class A():
	def __init__(self,name):
		self._name = name
	def test(self):
		print("hello python")
class B(A):
	def __init__(self,name,age):
		A.__init__(self,name)
		self._age = age

此方法虽然在父类的__init__方法上添加了功能,但是程序相对不太灵活
如果父类改变,程序中的代码需要改写


此时则需要用到super()函数来代替父类

class A():
	def __init__(self,name):
		self._name = name
	def test(self):
		print("hello python")
class B(A):
	def __init__(self,name,age):
		super().__init__(name)
		self._age = age

此时不仅使程序变得灵活,且省去了self传参


  1. 属性和方法

实例属性 是通过实例对象添加的属性
实例属性只能通过实例对象来访问和修改,类对象无法访问和修改

class A():
	def __init__(self,name):
		self._name = name
a = A("xiaoming")
a.name = "xiaozhang"

类属性 直接在类中定义的属性
类属性只能通过类对象类修改,无法通过实例对象来修改

class A():
	name = "xiaoming"
A.name = "xiaozhang"

实例方法
(在类中常规定义的方法都为实例方法)
实例方法 实例对象可以直接调用
类方法调用方式:类名.方法名(实例对象)

class A():
	def test(self):
		print("hello python")
a = A()
a.test()
A.test(a)

类方法
实例对象和类 都可以直接调用
创建类方法 需要在方法前添加 @classmethod

class A():
	@classmethod
	def test(cls):
		print("hello python")
a = A()
a.test()
A.test()

调用类方法时 会自动传入一个实参 类

Python中的类是一种用于创建对象的蓝图或模板。这个类定义了对象的属性和行为,并且可以创建多个具有相同属性和行为的对象。 在Python中,我们使用`class`关键字来定义一个类。一个类可以包含多个方法(函数),用于定义对象的行为。比如,在一个名为`Person`的类中,我们可以定义一个`say_hello`方法,用于打招呼: ```python class Person: def say_hello(self): print("Hello, world!") ``` 创建一个类的对象的方式是调用类的构造函数。构造函数的名称是`__init__`,它会在创建对象时自动调用。我们可以在构造函数中初始化对象的属性。比如,在`Person`类中,我们可以添加一个名为`name`的属性: ```python class Person: def __init__(self, name): self.name = name def say_hello(self): print(f"Hello, {self.name}!") person1 = Person("Alice") person1.say_hello() # 输出:Hello, Alice! ``` 在这个例子中,我们创建了一个`Person`类的实例`person1`,并传递了一个名为"Alice"的参数。在`say_hello`方法中,我们使用了对象的`name`属性来打印个性化的招呼。 类的对象可以访问类的属性和方法。可以使用点符号来访问对象的属性和调用对象的方法。例如: ```python person1.name = "Bob" person1.say_hello() # 输出:Hello, Bob! ``` 在这个例子中,我们修改了`person1`的`name`属性,并调用了`say_hello`方法来打印修改后的招呼。 总结来说,Python中的类是用于创建对象的模板。类定义了对象的属性和行为,并且可以创建多个具有相同属性和行为的对象。通过调用类的构造函数可以创建对象,并可以使用点符号来访问对象的属性和调用对象的方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值