python面向对象重点笔记
一、基础知识
- 设计一个三要素
- 1 类名
- 2 属性
- 3 方法
>#类的命名演示
>#命名原则: 类名一定要满足大驼峰的命名原则,就是单词首字母大
>clsss ClassName:
> pass
定义一个完整类的语法
一个完成的类包括:
类属性、类方法
实例属性、实例方法
私有属性、私有方法
静态方法、一些特殊的内置方法
>class 类名(object):
> #这是一个类的属性
> show_count = 0
> def __new__(cls, *args, **kwargs)::
> """
> 这是一个为对象分配内存的一个object的函数
> 这里必须调用一句话就是父类的方法super.__new__(cls)
> 不然的话我们的对象是创建不成功的
> """
> instance = super.__new__(cls)
> return instance
> def __init__(self):
> """
> 这是一个初始的函数
> 在对象刚创建的时候就会被创建
> """
> # 这是一个实例的属性
> # 这是一个私有的属性
> self.__age = 18
> # 这是一个共有的属性
> self.name = '小明‘
> pass
> def __del__(self):
> """
> 这个函数是一个当对象在内存中结束的时候调用的一个函数
> """
> pass
> def __str__(self):
> """
> 这个函数是在用print(实例)的时调用的,必须是一个返回的
> 参数return ""
> """
> return "这里自定义就好了"
> #这是一个私有的方法
> def __test(self):
> pass
> # 这是一个实例对象
> def run(self)
> pass
> #这是一个静态方法
> @staticmethod
> def static_run():
> pass
> # 这是一个类方法
> @classmethod
> def class_run():
> pass
>
>
1 实例方法
作用:实例方法封装起来就是为了能更好的为对象进行服务的。通过对象调用,其中传入默认的参数为self,这个self作用是,那个对象调用代表那个对象,然后就可以通过这个进行操作。
调用:方法调用,通过
>对象名.方法()即可调用。有人可能会发现通过类名然后传入对象参数也可以进行调用。例如:
class CLanguage:
def info(self):
print("我正在学 Python")
clang = CLanguage()
#通过类名直接调用实例方法
CLanguage.info(clang)
可以看到,通过手动将 clang 这个类对象传给了 self 参数,
使得程序得以正确执行。实际上,这里调用实例方法的形式完
全是等价于 clang.info()。
>
可以参考:Python类调用实例方法
语法:
def drink(self):
pass
注意事项:注意命名规范。注意解释
2 实例属性
作用:为了对象的使用
调用:
通过:对象名.属性
语法:
class A:
def __init__(self):
self.age = 1
a = A()
a.age
注意事项
在创建属性的时候,如果不给属性值,可以用None赋值。在创建对象时最容易出错的就是忘记带(),如a = A这个时候调用的时候就忘记带()了
3 类属性、类方法
作用 类属性用来纪录这个类的相关的特性,比如该类创建了几个对象,就可以通过定义一个类属性,在加上__init__()初始函数的配合就好了。
调用
调用的时候可以通过
类名.属性名,调用(推荐使用)
通过 对象.属性名,调用但是必须该对象没有相关的属性与类属性名一样的,所以一般不建议使用。这是属性获取机制的原理就是向上查找机制。
语法:
class A(object):
count = 0
@classmethod
def class_method(cls):
pass
a = A()
1 类名调用类属性(推荐)
A.count
2 对象调用类属性
a.count
3 类名调用类方法(推荐)
A.class_method()
4 在实例方法中没有与静态方法同名的时候就可以用对象来调用
a.class.method()
注意事项
什么属性用什么来调用,这样可以防止出错和各种意外
私有属性和私有方法
**作用:**为了有些属性和方法自己用来调用,不想被人知道,所以设置为私有方法就好了。
语法:
在这里插入代码片
```私有方法
class A(object):
def __init__(self):
# 私有属性
self.__age = age
#私有方法
def __private()
pass
调用:
方法只能内部调用,通过对象也就是self调用
在内部调用
self.__private()
self.age = 19
我们知道python是一个伪私有的语言,所以我们在外部调用的时候可以通过
对象.__类名__属性就可以得到调用
a = A()
a.__A__private()
这种了解即可。
注意事项:
什么属性用什么来调用,这样可以防止出错和各种意外
静态方法
**作用:**在开发的时候我们不需要访问实例属性或者调用实例方法
也不用访问类属性或者类方法,这个时候可以把它设置为静态方法,比如在游戏中一般设置为游戏提示。
语法:
@staticmethod
def static_method():
pass
调用:
可以通过类名直接调用
其实对象也可以调用不建议
A.static_method()
注意事项:
建议用类名直接调用
重要的内置函数,常用的一些重写内部的方法
- 1__str__(self)
这个函数必须有一个返回值,这个用于print
当我们调用print打印实例对象的时候,一般默认的是输出函数的地址
我们改为
class A(object):
def __str__(self):
str1 = "hello world"
return str
a = A()
# 我们调用print打印的时候输出的结果为 hello world
print(a)
- 2__new__(self)
这个函数在类创建对象的时候用来分配内存空间的。
我们重写的时候
class A(object):
def __new__(cls, *args, **keyword):
#首先我们要调用这个函数的父类方法获取地址
instance = super.__new__(cls)
return instance
- 3 __file__查看模块的完成路径
import random
# 输出模块的完整路径
print(random.__file__)
-4 _ mro _ 、dir(对象)和__file__
_ mro_:主要用于、查看在多继承的时候看方法的执行顺序
dir(对象):查看该对象有哪些方法
_ file_:的作用是为了查模块的路径
class A(object):
def aa(self):
print("this is B")
class B(A):
def aa(self):
print("this is B")
print("mro的作用:%s" % B.mro())
print("dir的作用:%s" % dir(B))
print("__file__的作用:%s" % demo2.__file__)
"""
输出结果:
mro的作用:[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
dir的作用:['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'aa']
__file__的作用:E:\python\zhu_0116\venv\demo2.py
"""
单例模式
- 目的:为了让类创建的对象在系统中只有唯一的一个实例。
每一次执行类()时返回的都是一个对象。一般在单例模式中比较常用
如单例模式代码:
class A(object):
#定义一个类属性,用来保存实例的内存.
instance = None
def __new__(cls, *args, **kwargs):
if instace is None:
instance = super.__new__(cls)
return instance
# 如果想让初始化的单独执行一次可以设置一个标记就好了
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119324.html