python 面向对象重点笔记1

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的作用:[, , ]
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
# 如果想让初始化的单独执行一次可以设置一个标记就好了

你可能感兴趣的:(python就业笔记,python,python)