标签:绑定 参数 一个 为什么 公共属性 使用 rar 私有属性 成员
class Dog(): # 类以class开头,类的名字使用驼峰体命名。不加()为经典类,加()为新式类
d_type = "京巴" # 类的成员变量,类属性,类变量(属于每个实例共有的属性)
def __init__(self,name,age): # 初始化方法,实例化的时候会自动执行,会进行一些初始化工作
self.name = name # 将name与实例进行绑定,也就变成了私有属性
self.age = age
def say_hi(self): # 类方法,第一个参数是self,self代表类实例本身
print("hi,大家好我是一个{}".format(self.d_type))
# d = Dog() # 类的实例化
# d2 = Dog() # 类的实例化
d = Dog("mjj",12) # 类的实例化,实例化带有私有属性,这里的参数会直接传给__init__的方法中,这就是函数中参数的传递了
d2 = Dog(name="ccc",age=18)
print(d.name,d.age)
print(d2.name,d2.age)
print(d.d_type) # 类的实例化调用类属性
print(d2.d_type) # 类的实例化调用类属性
d.say_hi() # 使用类的实例化调用类方法
d2.say_hi() # 使用类的实例化调用类方法
print(id(d.d_type),id(d2.d_type))
类属性:属于公共属性,这个值是存在类的内存空间,(每个实例有自己的内存空间)
print(id(d.d_type),id(d2.d_type))
理解self是实例本身
看我使用d.say_hello(),并没有传递任何的参数,但是没有报错。我们知道函数如果有形参的话,就必须要传递实参与之相对应,是因为python自动给传递了一个参数d.say_hello()相当于d.say_hello(d),为了验证我们在方法里面打印这个self看看与实例d的id是否一样
class Dog(): # 类以class开头,类的名字使用驼峰体命名。不加()为经典类,加()为新式类
d_type = "京巴" # 类的成员变量,类属性,类变量(属于每个实例共有的属性)
def __init__(self,name,age): # 初始化方法,实例化的时候会自动执行,会进行一些初始化工作
self.name = name # 将name与实例进行绑定,也就变成了私有属性,把这两个值真正的存在实例里
self.age = age
def say_hello(self):
print("hello ,大家好,我是{},年龄是{}".format(self.name,self.age))
print("这里是类中say_hello()方法中的self的内存id:{}".format(id(self)))
d = Dog("mjj",12) # 类的实例化,实例化带有私有属性,这里的参数会直接传给__init__的方法中,这就是函数中参数的传递了
print("这个是实例化对象d的内存id:{}".format(id(d)))
d.say_hello()
-
理解类变量和私有属性之间的区别
![image-20200506230926158](/Users/mac/Library/Application Support/typora-user-images/image-20200506230926158.png)
附:代码
# -*- conding:utf-8 -*-
# @Time : 2020/5/6 21:49
# @Author : shanshan
# @File : 类的基本使用.py
class Dog(): # 类以class开头,类的名字使用驼峰体命名。不加()为经典类,加()为新式类
d_type = "京巴" # 类的成员变量,类属性,类变量(属于每个实例共有的属性)
def __init__(self, name, age): # 初始化方法,实例化的时候会自动执行,会进行一些初始化工作
self.name = name # 将name与实例进行绑定,也就变成了私有属性,把这两个值真正的存在实例里
self.age = age
def say_hi(self): # 类方法,第一个参数是self,self代表类实例本身
print("hi,大家好我是一个{}".format(self.d_type))
def say_hello(self):
print("hello ,大家好,我是{},年龄是{}".format(self.name, self.age))
print("这里是类中say_hello()方法中的self的内存id:{}".format(id(self)))
# d = Dog() # 类的实例化
# d2 = Dog() # 类的实例化
d = Dog("mjj", 12) # 类的实例化,实例化带有私有属性,这里的参数会直接传给__init__的方法中,这就是函数中参数的传递了
d2 = Dog(name="ccc", age=18)
print("这个是实例化对象d的内存id:{}".format(id(d)))
d.say_hello()
# d2.say_hello()
print(d.name, d.age)
print(d2.name, d2.age)
print(d.d_type) # 类的实例化调用类属性
print(d2.d_type) # 类的实例化调用类属性
d.say_hi() # 使用类的实例化调用类方法
d2.say_hi() # 使用类的实例化调用类方法
print(id(d.d_type), id(d2.d_type))
私有属性:存储在初始化方法中,通过self.xxx = xxx将属性与实例进行绑定,因为self代表实例本身的嘛
![image-20200506224311242](/Users/mac/Library/Application Support/typora-user-images/image-20200506224311242.png)
类方法中调用私有属性,使用self.xxx
? ![image-20200506224731023](/Users/mac/Library/Application Support/typora-user-images/image-20200506224731023.png)
理解self是实例本身
看我使用d.say_hello(),并没有传递任何的参数,但是没有报错。我们知道函数如果有形参的话,就必须要传递实参与之相对应,是因为python自动给传递了一个参数d.say_hello()相当于d.say_hello(d),为了验证我们在方法里面打印这个self看看与实例d的id是否一样
class Dog(): # 类以class开头,类的名字使用驼峰体命名。不加()为经典类,加()为新式类
d_type = "京巴" # 类的成员变量,类属性,类变量(属于每个实例共有的属性)
def __init__(self,name,age): # 初始化方法,实例化的时候会自动执行,会进行一些初始化工作
self.name = name # 将name与实例进行绑定,也就变成了私有属性,把这两个值真正的存在实例里
self.age = age
def say_hello(self):
print("hello ,大家好,我是{},年龄是{}".format(self.name,self.age))
print("这里是类中say_hello()方法中的self的内存id:{}".format(id(self)))
d = Dog("mjj",12) # 类的实例化,实例化带有私有属性,这里的参数会直接传给__init__的方法中,这就是函数中参数的传递了
print("这个是实例化对象d的内存id:{}".format(id(d)))
d.say_hello()
![image-20200506225922460](/Users/mac/Library/Application Support/typora-user-images/image-20200506225922460.png)
那为什么python要自动给你传self,也就是实例本身呢?
理解类变量和私有属性之间的区别
附:代码
class Dog(): # 类以class开头,类的名字使用驼峰体命名。不加()为经典类,加()为新式类
d_type = "京巴" # 类的成员变量,类属性,类变量(属于每个实例共有的属性)
def __init__(self, name, age): # 初始化方法,实例化的时候会自动执行,会进行一些初始化工作
self.name = name # 将name与实例进行绑定,也就变成了私有属性,把这两个值真正的存在实例里
self.age = age
def say_hi(self): # 类方法,第一个参数是self,self代表类实例本身
print("hi,大家好我是一个{}".format(self.d_type))
def say_hello(self):
print("hello ,大家好,我是{},年龄是{}".format(self.name, self.age))
print("这里是类中say_hello()方法中的self的内存id:{}".format(id(self)))
# d = Dog() # 类的实例化
# d2 = Dog() # 类的实例化
d = Dog("mjj", 12) # 类的实例化,实例化带有私有属性,这里的参数会直接传给__init__的方法中,这就是函数中参数的传递了
d2 = Dog(name="ccc", age=18)
print("这个是实例化对象d的内存id:{}".format(id(d)))
d.say_hello()
# d2.say_hello()
print(d.name, d.age)
print(d2.name, d2.age)
print(d.d_type) # 类的实例化调用类属性
print(d2.d_type) # 类的实例化调用类属性
d.say_hi() # 使用类的实例化调用类方法
d2.say_hi() # 使用类的实例化调用类方法
print(id(d.d_type), id(d2.d_type))
标签:绑定 参数 一个 为什么 公共属性 使用 rar 私有属性 成员
原文地址:https://www.cnblogs.com/shanshan-test/p/12839905.html