diff --git a/homeassistant/components/mqtt/binary_sensor.py b/homeassistant/components/mqtt/binary_sensor.py
index 915a2780283108ae3e797d2c0d58c90ebd3bc154..d9351908665df97095979e360ccff5248b1413ef 100644
--- a/homeassistant/components/mqtt/binary_sensor.py
+++ b/homeassistant/components/mqtt/binary_sensor.py
@@ -10,7 +10,6 @@ import voluptuous as vol
 from homeassistant.components import binary_sensor
 from homeassistant.components.binary_sensor import (
     DEVICE_CLASSES_SCHEMA,
-    BinarySensorDeviceClass,
     BinarySensorEntity,
 )
 from homeassistant.config_entries import ConfigEntry
@@ -126,7 +125,6 @@ class MqttBinarySensor(MqttEntity, BinarySensorEntity, RestoreEntity):
 
     def __init__(self, hass, config, config_entry, discovery_data):
         """Initialize the MQTT binary sensor."""
-        self._state: bool | None = None
         self._expiration_trigger = None
         self._delay_listener = None
         expire_after = config.get(CONF_EXPIRE_AFTER)
@@ -154,7 +152,7 @@ class MqttBinarySensor(MqttEntity, BinarySensorEntity, RestoreEntity):
                 _LOGGER.debug("Skip state recovery after reload for %s", self.entity_id)
                 return
             self._expired = False
-            self._state = last_state.state == STATE_ON
+            self._attr_is_on = last_state.state == STATE_ON
 
             self._expiration_trigger = async_track_point_in_utc_time(
                 self.hass, self._value_is_expired, expiration_at
@@ -180,8 +178,10 @@ class MqttBinarySensor(MqttEntity, BinarySensorEntity, RestoreEntity):
         """Return the config schema."""
         return DISCOVERY_SCHEMA
 
-    def _setup_from_config(self, config):
+    def _setup_from_config(self, config: ConfigType) -> None:
+        self._attr_device_class = config.get(CONF_DEVICE_CLASS)
         self._attr_force_update = config[CONF_FORCE_UPDATE]
+
         self._value_template = MqttValueTemplate(
             self._config.get(CONF_VALUE_TEMPLATE),
             entity=self,
@@ -194,7 +194,7 @@ class MqttBinarySensor(MqttEntity, BinarySensorEntity, RestoreEntity):
         def off_delay_listener(now):
             """Switch device off after a delay."""
             self._delay_listener = None
-            self._state = False
+            self._attr_is_on = False
             self.async_write_ha_state()
 
         @callback
@@ -233,11 +233,11 @@ class MqttBinarySensor(MqttEntity, BinarySensorEntity, RestoreEntity):
                 return
 
             if payload == self._config[CONF_PAYLOAD_ON]:
-                self._state = True
+                self._attr_is_on = True
             elif payload == self._config[CONF_PAYLOAD_OFF]:
-                self._state = False
+                self._attr_is_on = False
             elif payload == PAYLOAD_NONE:
-                self._state = None
+                self._attr_is_on = None
             else:  # Payload is not for this entity
                 template_info = ""
                 if self._config.get(CONF_VALUE_TEMPLATE) is not None:
@@ -256,7 +256,7 @@ class MqttBinarySensor(MqttEntity, BinarySensorEntity, RestoreEntity):
                 self._delay_listener = None
 
             off_delay = self._config.get(CONF_OFF_DELAY)
-            if self._state and off_delay is not None:
+            if self._attr_is_on and off_delay is not None:
                 self._delay_listener = evt.async_call_later(
                     self.hass, off_delay, off_delay_listener
                 )
@@ -288,16 +288,6 @@ class MqttBinarySensor(MqttEntity, BinarySensorEntity, RestoreEntity):
 
         self.async_write_ha_state()
 
-    @property
-    def is_on(self) -> bool | None:
-        """Return true if the binary sensor is on."""
-        return self._state
-
-    @property
-    def device_class(self) -> BinarySensorDeviceClass | None:
-        """Return the class of this sensor."""
-        return self._config.get(CONF_DEVICE_CLASS)
-
     @property
     def available(self) -> bool:
         """Return true if the device is available and value has not expired."""
diff --git a/homeassistant/components/mqtt/switch.py b/homeassistant/components/mqtt/switch.py
index f8bf2f5bc6a8f7e94fce207486baee9e7e7710c1..f2a40facd8b411239c5ce6f22cb05bd133bdae16 100644
--- a/homeassistant/components/mqtt/switch.py
+++ b/homeassistant/components/mqtt/switch.py
@@ -7,11 +7,7 @@ from typing import Any
 import voluptuous as vol
 
 from homeassistant.components import switch
-from homeassistant.components.switch import (
-    DEVICE_CLASSES_SCHEMA,
-    SwitchDeviceClass,
-    SwitchEntity,
-)
+from homeassistant.components.switch import DEVICE_CLASSES_SCHEMA, SwitchEntity
 from homeassistant.config_entries import ConfigEntry
 from homeassistant.const import (
     CONF_DEVICE_CLASS,
@@ -125,8 +121,6 @@ class MqttSwitch(MqttEntity, SwitchEntity, RestoreEntity):
 
     def __init__(self, hass, config, config_entry, discovery_data):
         """Initialize the MQTT switch."""
-        self._state = None
-
         self._state_on = None
         self._state_off = None
         self._optimistic = None
@@ -138,8 +132,10 @@ class MqttSwitch(MqttEntity, SwitchEntity, RestoreEntity):
         """Return the config schema."""
         return DISCOVERY_SCHEMA
 
-    def _setup_from_config(self, config):
+    def _setup_from_config(self, config: ConfigType) -> None:
         """(Re)Setup the entity."""
+        self._attr_device_class = config.get(CONF_DEVICE_CLASS)
+
         state_on = config.get(CONF_STATE_ON)
         self._state_on = state_on if state_on else config[CONF_PAYLOAD_ON]
 
@@ -163,11 +159,11 @@ class MqttSwitch(MqttEntity, SwitchEntity, RestoreEntity):
             """Handle new MQTT state messages."""
             payload = self._value_template(msg.payload)
             if payload == self._state_on:
-                self._state = True
+                self._attr_is_on = True
             elif payload == self._state_off:
-                self._state = False
+                self._attr_is_on = False
             elif payload == PAYLOAD_NONE:
-                self._state = None
+                self._attr_is_on = None
 
             get_mqtt_data(self.hass).state_write_requests.write_state_request(self)
 
@@ -193,23 +189,13 @@ class MqttSwitch(MqttEntity, SwitchEntity, RestoreEntity):
         await subscription.async_subscribe_topics(self.hass, self._sub_state)
 
         if self._optimistic and (last_state := await self.async_get_last_state()):
-            self._state = last_state.state == STATE_ON
-
-    @property
-    def is_on(self) -> bool | None:
-        """Return true if device is on."""
-        return self._state
+            self._attr_is_on = last_state.state == STATE_ON
 
     @property
     def assumed_state(self) -> bool:
         """Return true if we do optimistic updates."""
         return self._optimistic
 
-    @property
-    def device_class(self) -> SwitchDeviceClass | None:
-        """Return the device class of the sensor."""
-        return self._config.get(CONF_DEVICE_CLASS)
-
     async def async_turn_on(self, **kwargs: Any) -> None:
         """Turn the device on.
 
@@ -224,7 +210,7 @@ class MqttSwitch(MqttEntity, SwitchEntity, RestoreEntity):
         )
         if self._optimistic:
             # Optimistically assume that switch has changed state.
-            self._state = True
+            self._attr_is_on = True
             self.async_write_ha_state()
 
     async def async_turn_off(self, **kwargs: Any) -> None:
@@ -241,5 +227,5 @@ class MqttSwitch(MqttEntity, SwitchEntity, RestoreEntity):
         )
         if self._optimistic:
             # Optimistically assume that switch has changed state.
-            self._state = False
+            self._attr_is_on = False
             self.async_write_ha_state()