python面向对象常见问题
时间: 2023-12-01 16:43:17 浏览: 59
python面向对象
Python面向对象编程中常见的问题包括以下几个方面:
1. 类的定义和实例化:如何定义一个类?如何实例化一个类?如何给类添加属性和方法?
2. 继承和多态:如何实现继承?如何实现多态?如何使用super()函数?
3. 私有变量和方法:如何定义私有变量和方法?如何访问私有变量和方法?
4. 魔术方法:如何使用魔术方法?常见的魔术方法有哪些?
5. 类的装饰器:如何使用类的装饰器?常见的类的装饰器有哪些?
6. 元类:什么是元类?如何使用元类?
以下是一个简单的例子,演示了如何定义一个类、实例化一个类、添加属性和方法、继承和多态、私有变量和方法、魔术方法、类的装饰器和元类:
```python
# 定义一个类
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
print('{} is eating'.format(self.name))
# 实例化一个类
dog = Animal('dog')
# 添加属性和方法
dog.age = 2
dog.bark = lambda: print('wang wang')
# 继承和多态
class Cat(Animal):
def __init__(self, name):
super().__init__(name)
def eat(self):
print('{} is eating fish'.format(self.name))
# 私有变量和方法
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age
def __secret(self):
print('{} is {} years old'.format(self.name, self.__age))
def show(self):
self.__secret()
# 魔术方法
class Magic:
def __init__(self, name):
self.name = name
def __str__(self):
return 'Magic object (name: {})'.format(self.name)
# 类的装饰器
def log(cls):
class NewClass(cls):
def __init__(self, *args, **kwargs):
print('log: create object')
super().__init__(*args, **kwargs)
return NewClass
@log
class Person2:
def __init__(self, name, age):
self.name = name
self.age = age
# 元类
class MyMeta(type):
def __new__(cls, name, bases, attrs):
attrs['add'] = lambda self, x: self.append(x)
return type.__new__(cls, name, bases, attrs)
class MyList(list, metaclass=MyMeta):
pass
l = MyList()
l.add(1)
l.add(2)
print(l) # 输出:[1, 2]
```
阅读全文